繁体   English   中英

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

[英]Trying to print the sum of each element of an 2d array (Java)

我的项目正在创建一个小表格,显示加拿大所有省份在 8 个月内恢复的 COVID 病例数。

这是一个二维数组的格式,其中数组的垂直代表每个月的病例,水平代表每个省份

我的目标是通过来自所有省份的案例总和来找到每个月的案例总和

我必须创建一个嵌套的 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 }};

以上是我的二维数组,我的目标是将所有 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);
}

任何帮助将不胜感激。

您应该先垂直遍历数组,然后再水平遍历数组。

这会给你你要找的答案

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 有了上面你给出的代码。 只需将二维数组的所有值相加即可。

一个优雅的解决方案可能是将数组的所有值映射到 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);

}

您的循环所做的是打印前 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM