每个数组的元素除以2

时间:2018-10-21 18:58:58

标签: java

在此数组中,我尝试在每个循环后输出每个元素的一半,直到数组的所有元素都变为零,例如[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 ----");
    }
}

1 个答案:

答案 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++;
    }