Java程序 执行出错
题目:15个红球15个绿球排一圈,从第1个数开始数,到第13个球时,拿出此球,然后从下个球开始数,当再数到第13个球时取出此球,如此循环,直到剩下15个球。问:怎样的排列...
题目:15个红球15个绿球排一圈,从第1个数开始数,到第13个球时,拿出此球,然后从下个球开始数,当再数到第13个球时取出此球,如此循环,直到剩下15个球。问:怎样的排列能实现取出的全是红球。
public class TestUp {
public static void main(String[] args) {
boolean []arr = new boolean[30];
for(int i=0;i<arr.length;i++){
arr[i] = true;
}
int leftCount = arr.length;
int countNum = 0;
int index = 0;
while(leftCount>15){
if(arr[index]==true){
countNum++;
if(countNum==13){
countNum = 0;
arr[countNum] = false;
System.out.print(index+" ");
leftCount--;
}
}
index++;
if(index==30){
index = 0;
}
}
}
} 展开
public class TestUp {
public static void main(String[] args) {
boolean []arr = new boolean[30];
for(int i=0;i<arr.length;i++){
arr[i] = true;
}
int leftCount = arr.length;
int countNum = 0;
int index = 0;
while(leftCount>15){
if(arr[index]==true){
countNum++;
if(countNum==13){
countNum = 0;
arr[countNum] = false;
System.out.print(index+" ");
leftCount--;
}
}
index++;
if(index==30){
index = 0;
}
}
}
} 展开
1个回答
展开全部
你的程序:错的地方我加了注释并且改过来了:
public class TestUp {
public static void main(String[] args) {
boolean[] arr = new boolean[30];
for (int i = 0; i < arr.length; i++) {
arr[i] = true;
}
int leftCount = arr.length;
int countNum = 0;
int index = 0;
while (leftCount > 15) {
if (arr[index] == true) {
countNum++;
if (countNum == 13) {
countNum = 0;
arr[index] = false; // 应该是将arr[index] = false 而不是
// arr[countNum] = false;
System.out.print(index+1+ " "); // index是从0开始的,而我们实际中是从1开始数,所以要加1
leftCount--;
}
}
index++;
if (index == 30) {
index = 0;
}
}
}
====================结果:
13 26 9 23 7 22 8 25 12 30 18 6 29 20 15
另外附赠一个链表写的程序:
public class QueuePlay {
Ball head = new Ball(-1);
Ball watcher = null;
public void display(int num) {
for (int i = 1; i <= num; i++) {
if (head.right == null) {
watcher = new Ball(-1);
watcher = head;
Ball d = new Ball(i);
watcher.right = d;
d.left = head;
watcher.left = null;
watcher = d;
} else {
Ball d = new Ball(i);
watcher.right = d;
d.left = watcher;
watcher = d;
}
}
watcher.right = head.right;
head.right.left = watcher;
watcher = head.right;
int index = 1;
int kicked = 0;
while (watcher != null && kicked < 15) {
Ball tmp;
if (index % 13 != 0) {
watcher = watcher.right;
} else {
watcher.say();
tmp = watcher;
watcher = watcher.right;
tmp.right.left = tmp.left;
tmp.left.right = tmp.right;
kicked++;
}
index++;
}
}
public static void main(String[] args) {
new QueuePlay().display(30);
}
class Ball {
int id = -1;
Ball left = null;
Ball right = null;
public Ball(int id) {
this.id = id;
}
public void say() {
System.out.println("在位置:"+id+" 放一个红球球");
}
}
}
=========================结果
在位置:13 放一个红球球
在位置:26 放一个红球球
在位置:9 放一个红球球
在位置:23 放一个红球球
在位置:7 放一个红球球
在位置:22 放一个红球球
在位置:8 放一个红球球
在位置:25 放一个红球球
在位置:12 放一个红球球
在位置:30 放一个红球球
在位置:18 放一个红球球
在位置:6 放一个红球球
在位置:29 放一个红球球
在位置:20 放一个红球球
在位置:15 放一个红球球
public class TestUp {
public static void main(String[] args) {
boolean[] arr = new boolean[30];
for (int i = 0; i < arr.length; i++) {
arr[i] = true;
}
int leftCount = arr.length;
int countNum = 0;
int index = 0;
while (leftCount > 15) {
if (arr[index] == true) {
countNum++;
if (countNum == 13) {
countNum = 0;
arr[index] = false; // 应该是将arr[index] = false 而不是
// arr[countNum] = false;
System.out.print(index+1+ " "); // index是从0开始的,而我们实际中是从1开始数,所以要加1
leftCount--;
}
}
index++;
if (index == 30) {
index = 0;
}
}
}
====================结果:
13 26 9 23 7 22 8 25 12 30 18 6 29 20 15
另外附赠一个链表写的程序:
public class QueuePlay {
Ball head = new Ball(-1);
Ball watcher = null;
public void display(int num) {
for (int i = 1; i <= num; i++) {
if (head.right == null) {
watcher = new Ball(-1);
watcher = head;
Ball d = new Ball(i);
watcher.right = d;
d.left = head;
watcher.left = null;
watcher = d;
} else {
Ball d = new Ball(i);
watcher.right = d;
d.left = watcher;
watcher = d;
}
}
watcher.right = head.right;
head.right.left = watcher;
watcher = head.right;
int index = 1;
int kicked = 0;
while (watcher != null && kicked < 15) {
Ball tmp;
if (index % 13 != 0) {
watcher = watcher.right;
} else {
watcher.say();
tmp = watcher;
watcher = watcher.right;
tmp.right.left = tmp.left;
tmp.left.right = tmp.right;
kicked++;
}
index++;
}
}
public static void main(String[] args) {
new QueuePlay().display(30);
}
class Ball {
int id = -1;
Ball left = null;
Ball right = null;
public Ball(int id) {
this.id = id;
}
public void say() {
System.out.println("在位置:"+id+" 放一个红球球");
}
}
}
=========================结果
在位置:13 放一个红球球
在位置:26 放一个红球球
在位置:9 放一个红球球
在位置:23 放一个红球球
在位置:7 放一个红球球
在位置:22 放一个红球球
在位置:8 放一个红球球
在位置:25 放一个红球球
在位置:12 放一个红球球
在位置:30 放一个红球球
在位置:18 放一个红球球
在位置:6 放一个红球球
在位置:29 放一个红球球
在位置:20 放一个红球球
在位置:15 放一个红球球
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询