java - 每个数组的元素除以 2
问题描述
在这个数组中,我试图在每个循环之后输出每个元素的一半,直到数组的所有元素都变为零,如 [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 ----");
}
}
解决方案
您必须交换循环。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++;
}
推荐阅读
- excel - Excel 添加查询方法
- c - C中的向量结构
- c# - Parallel.ForEach 在 3 个收益返回后挂起?
- python - 通过COM通过python中的多线程进行Outlook
- shiny - 在闪亮上动态添加情节痕迹
- html - 如何在使用 vba 抓取网页后删除引号
- powerpoint - powerpoint 的 plotly 插件,如何嵌入本地图
- css - CSS:如何使用相对位置和多个项目创建下拉菜单
- python-3.x - 将工作代码转换为更面向对象的结构时出错错误:字符串索引必须是整数 Python 3
- google-sheets - 如何将谷歌表格嵌入或链接到文档?