尝试打印2d数组的每个元素的总和(Java)

时间:2020-09-23 23:07:20

标签: java arrays

“我的项目”正在创建一个小表格,显示在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);
}

任何帮助将不胜感激。

3 个答案:

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