java - 如何循环遍历每个数组项并除以二?
问题描述
一个数组居民代表城市及其各自的人口。例如,以下数组显示了 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 循环中尝试resident.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 ----");
推荐阅读
- android - WebView 到顶部的滚动距离
- python - python中如何删除分号前的所有字母?
- arrays - 是否有 pyarrow 数组生成器
- android - 如何通过dataBinding访问fragment中activity的父视图
- asp.net-core - 如何在 ASP.NET Core 中禁用响应解压?
- javascript - 检查 localStorage 中的值是否以字符串和 console.log() 值名称开头
- tensorflow - Why Spark ML perceptron classifier has high F1-score while the same model on TensorFlow performs very badly?
- devexpress - 无法将用户可控参数链接到查询:DevExpress Report and Dashboard Server
- maven - Tomcat 8 战争部署 LifecycleException:无法启动组件
- c++ - c ++神经网络路径查找不动