在此数组中,我尝试在每个循环后输出每个元素的一半,直到数组的所有元素都变为零,例如[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,4,3,2,7,1]
第3天[0,3,0,4,4,3,2,7,1]
第4天[0,1,0,4,4,3,2,7,1]
第5天[0,0,0,4,4,3,2,7,1]
...
我该如何在每个循环之后将每个元素减半;
第0天[3,6,0,4,3,2,7,0]
第1天[3,3,0,2,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 ----");
}
}
答案 0 :(得分: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++;
}