在这个数组中,我试图在每次循环后输出每个元素的一半,直到数组的所有元素都变成零,如 [0,0,0,0,0,0,0,0]。假设我的数组是 [3, 6, 0, 4, 3, 2, 7, 1] 但我的程序在每个元素为零之后执行此操作,然后转到下一个。第 1 天 [1, 6, 0, 4, 3, 2, 7, 1]第 2 天 [0, 6, 0, 4, 3, 2, 7, 1]第 3 天 [0, 3, 0, 4, 3] , 2, 7, 1]第 4 天 [0, 1, 0, 4, 3, 2, 7, 1]第 5 天 [0, 0, 0, 4, 3, 2, 7, 1]...怎么办我像这样在每次循环后将每个元素减半;第 0 天 [3, 6, 0, 4, 3, 2, 7, 0]第 1 天 [3, 3, 0, 2, 3, 2, 3, 0]第 2 天 [3, 1, 0, 1, 3] , 2, 1, 0]第 3 天 [3, 0, 0, 0, 3, 2, 0, 0]第 4 天 [1, 0, 0, 0, 1, 1, 0, 0]第 5 天 [0, 0, 0, 0, 0, 0, 0, 0]到目前为止,这是我的代码:import java.util.Arrays;import java.util.Scanner;public class Zombi2 { public static void main(String[] args) { boolean cond = false; Scanner input = new Scanner(System.in); int[] inhabitants = new int[8]; for(int i=0; i<inhabitants.length; i++) { inhabitants[i] = input.nextInt(); } for(int x : inhabitants) { if(x != 0) cond = true; } int t = 1; while(cond) { cond = false; for(int x=0; x<inhabitants.length; x++) { while(inhabitants[x]>0) { inhabitants[x] = inhabitants[x]/2; if(inhabitants[x] != 0) cond = true; System.out.println("Day " + t + " " + Arrays.toString(inhabitants)); t++; } } } do { for(int x : inhabitants) { if(x != 0) cond = true; } }while(cond); System.out.println("---- EXTINCT ----"); }}
1 回答
catspeake
TA贡献1111条经验 获得超0个赞
您必须交换循环。该while回路必须在外部和for环内:
我相信所有的整数都是正因此受到检查,如果它们的总和为0,循环停止。
我认为这会奏效:
int sum = 1;
int day = 1;
while (sum > 0) {
sum = 0;
for (int x = 0; x < inhabitants.length; x++) {
if (inhabitants[x] > 0)
inhabitants[x] = inhabitants[x] / 2;
sum += inhabitants[x];
}
System.out.println("Day " + day + " " + Arrays.toString(inhabitants));
day++;
}
添加回答
举报
0/150
提交
取消