繁体   English   中英

在锯齿状数组中添加各列不起作用

[英]Adding each column inside a Jagged array not working

我最近一直在使用2D和锯齿状数组,正在尝试添加行中的每个元素和列中的每个元素。 我得到了打印出每一行总和的代码,但是在添加数组中的每一列时遇到了困难。

注意:我尝试做sum += numbers[c][r]; 但它不起作用

    import java.util.Arrays;
    import java.io.*;

    public class Homework{
       public static void main(String[] args) {
          int[][] numbers = {  {3, 2, 5,},
                               {1, 4, 4, 8, 13},
                               {9, 1, 0, 2},
                               {0, 2, 6, 3, -1, -8} };

//Adding each row in the array          
int sum = 0;
          for(int r = 0; r < numbers.length; r++) {
             sum = 0;
             for(int c = 0; c < numbers[r].length; c++) {
                sum += numbers[r][c];
             }
             System.out.println("Sum of row: " + sum);
          }

//Adding each column in the row          
int sum2 = 0;
          for(int r = 0; r < numbers.length; r++) {
             sum2 = 0;
             for(int c = 0; c < numbers[r].length; c++) {
                sum2 += numbers[c][r];
             }
             System.out.println("Sum of column: " + sum2);
          }
       }
    }

好的,您的步伐正确。 在进入代码之前,让我解释一下思维方式。

您有一个非正方形的2d数组,并且想要每行和每一列的总计。 行很简单,您已经完成了。 列要困难一点,因为由于列是非正方形的,所以您将遇到ArrayOutOfBoundsExceptions因为它试图访问不存在的数组。

为了解决这个问题,您需要知道最大列数,然后遍历数组。 但是,您还需要注意ArrayOutOfBoundsException ,确保考虑到当前列迭代何时大于行长度。

我向您的行总和部分添加了一个int max ,这样,我就不必多次遍历相同的信息。

之后,我将c < numbers[r].length替换为'max',因为我们需要遍历X列。

然后,我遍历行,因为它们是统一的,并且很容易通过numbers.length找到。

因此,对代码进行简单的更改即可产生所需的结果。 见下文。

        int[][] numbers = {
                {3, 2, 5},
                {1, 4, 4, 8, 13},
                {9, 1, 0, 2},
                {0, 2, 6, 3, -1, -8}
        };

        int max = 0;


//Adding each row in the array
        int sum;
        for(int r = 0; r < numbers.length; r++) {
            sum = 0;
            for(int c = 0; c < numbers[r].length; c++) {
                sum += numbers[r][c];
                if(numbers[r].length > max){
                    max = numbers[r].length;
                }
            }
            System.out.println("Sum of row: " + sum);
        }
        System.out.println("Max " + max);

//Adding each column in the row
        int sum2;
        for(int c = 0; c < max; c++) {
            sum2 = 0;
            for(int y = 0; y < numbers.length; y++){
                if(numbers[y].length > c){
                    sum2 += numbers[y][c];
                    System.out.println(numbers[y][c]);
                }
            }
            System.out.println("Sum of column: " + sum2);
        }
    }

暂无
暂无

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

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