簡體   English   中英

如何遍歷每個數組項並除以二?

[英]How do I loop through each array item and divide by two?

數組居民代表城市及其各自的人口。 例如,以下數組顯示了 8 個城市及其各自的人口:

[3, 6, 0, 4, 3, 2, 7, 1]

由於大流行的僵屍病正在消滅人類的生命,一些城市的人口為 0。 每一天之后,每個城市都會失去一半的人口。 編寫一個程序來循環遍歷每個城市的人口並使其失去一半的人口,直到所有城市都沒有人為止。 更新數組中的每個元素並每天打印如下數組:

Day 0 [3, 6, 0, 4, 3, 2, 7, 1]
Day 1 [1, 3, 0, 2, 1, 1, 3, 0]
Day 2 [0, 1, 0, 1, 0, 0, 1, 0]
Day 3 [0, 0, 0, 0, 0, 0, 0, 0]
---- EXTINCT ----

問題是當我輸入 [3, 6, 0, 4, 3, 2, 7, 1] 時,它給了我兩個帶零的額外數組行;

Day 0 [3, 6, 0, 4, 3, 2, 7, 1]
Day 1 [1, 3, 0, 2, 1, 1, 3, 0]
Day 2 [0, 1, 0, 1, 0, 0, 1, 0]
Day 3 [0, 0, 0, 0, 0, 0, 0, 0]
Day 4 [0, 0, 0, 0, 0, 0, 0, 0]
Day 5 [0, 0, 0, 0, 0, 0, 0, 0]
---- EXTINCT ----

當我在 for 循環中嘗試residents.length-2時,它可以工作,但是當輸入不同時它會產生另一個問題,例如;

20
20
0
20
20
10
0
10

這是我的代碼;

import java.util.*;

class Main {
  public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    int[] inhabitants = new int[8];

    for(int i=0; i<inhabitants.length; i++) {
        inhabitants[i] = input.nextInt();
    }

    int day = 0;
    System.out.println("Day " + day + " "+ Arrays.toString(inhabitants));
    for (int i = inhabitants.length/2; i <= inhabitants.length-2; i++) {
        for (int j =0; j < inhabitants.length; j++) {
            inhabitants[j] /= 2;
        }
        day++;
        System.out.println("Day " + day + " "+ Arrays.toString(inhabitants));
    }

    System.out.println("---- EXTINCT ----");
  }
}

你的外循環條件應該是inhabitants沒有完全被零填充。 就像是,

int day = 0;
System.out.println("Day " + day + " " + Arrays.toString(inhabitants));
while (!Arrays.stream(inhabitants).allMatch(x -> x == 0)) {
    day++;
    for (int i = 0; i < inhabitants.length; i++) {
        inhabitants[i] /= 2;
    }
    System.out.println("Day " + day + " " + Arrays.toString(inhabitants));
}
System.out.println("---- EXTINCT ----");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM