“我的项目”正在创建一个小表格,显示在8个月内加拿大各省中已发现的COVID病例数。
其格式为2D数组,其中数组的垂直代表每个月的病例,水平的代表每个省份
我的目标是每月根据各省的病例总数来找到病例总数
我必须创建一个嵌套的for循环,以计算指定月份中加拿大已恢复人员的总数。
因此,我必须在for循环中将每个索引加在一起。
int[][] recovered = {{ 106, 107, 111, 133, 221, 767, 866, 1001 },
{ 502, 615, 209, 947, 1106, 2634, 3178, 4445 },
{ 12, 26, 34, 18, 13, 30, 46, 52 },
{ 163, 203, 276, 308, 567, 729, 628, 765 }};
上面是我的2d数组,我的目标是将所有0的和,1的2和的总和,依此类推。
我试图让我的for循环根据数组的长度将每个索引的总和加在一起,但结果不准确。
int sum=0;
for(int i=0; i<recovered.length;i++) {
for(int j=0; j<recovered[i].length;j++) {
sum+=recovered[i][j];
}
System.out.println(sum);
}
任何帮助将不胜感激。
答案 0 :(得分:0)
您应该先垂直遍历数组,然后水平遍历。
这将为您提供所需的答案
int sum=0;
for(int j=0; j<recovered[0].length;j++) {
for(int i=0; i<recovered.length;i++) {
sum+=recovered[i][j];
}
System.out.println(sum);
sum = 0;
}
编辑 第一个条件循环
for(int j=0; j<recovered[0].length;j++)
将使用较小数组的长度,在示例中为8。假设所有较小的数组都具有相同的长度。您不必担心再次使用另一个变量循环。这将垂直遍历第二个数组。
第二个条件循环
for(int i=0; i<recovered.length;i++)
将检查数组中有多少个“迷你”数组,然后开始水平遍历该数组,即遍历每个“迷你”数组。
我发现您的代码中缺少一个细节,那就是您在打印出结果后不必再次设置sum = 0
。有了上面给出的代码。只需将2D数组的所有值相加即可。
答案 1 :(得分:0)
一种优雅的解决方案是将数组的所有值映射到IntStream中,然后使用sum函数。这样一来就可以解决问题:
public static void main(String[] args) {
int[][] recovered = {{ 106, 107, 111, 133, 221, 767, 866, 1001 },
{ 502, 615, 209, 947, 1106, 2634, 3178, 4445 },
{ 12, 26, 34, 18, 13, 30, 46, 52 },
{ 163, 203, 276, 308, 567, 729, 628, 765 }};
final var result = Arrays.stream(recovered).flatMapToInt(Arrays::stream).sum();
System.out.println(result);
}
答案 2 :(得分:0)
您要执行的循环操作是先打印前8个月的总和,然后再打印后8个月的总和,依此类推,因此,正如您已告诉您要明智地显示月份总和。 我建议您将列循环作为外部循环运行,将行循环作为内部循环运行, 这样。
for(int col=0; col < recovered[0].length; col++) {
int sum = 0;
for(int row=0; row < recovered.length; row++) {
sum+=recovered[row][col];
}
System.out.println(sum);
}