Java 2D数组:对列进行求和并显示数组问题

时间:2015-04-25 04:23:06

标签: java arrays matrix

当列数和行数相同时,此代码可以正常工作。当它们不同时会在columnSum方法中抛出异常。

这是错误信息。

  

线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:

这是我的代码

public static void columnSum(int[][] anArray)
{
    int sum = 0;

    for (int col = 0; col < anArray.length; col++) 
    {
        for (int r = 0; r < anArray[col].length; r++) 
        {
            sum += anArray[r][col];
        }

        System.out.println("Sum of column " + col + " = " + sum);
     }

     System.out.println();
}

我不知道为什么我的代码在列数多于行数时不起作用,反之亦然。

有人有想法吗?

2 个答案:

答案 0 :(得分:0)

更改     sum += anArray[r][col]

要     sum += anArray[col][r]

这就是为什么它在列&amp;行的大小相同。当它们的长度不同时,例如5 cols&amp; 3行,您的代码将尝试在其中一个迭代中访问anArray [3] [5]并且该元素不存在,因此异常。

答案 1 :(得分:0)

您的循环顺序错误。在外部循环中,您将迭代数组长度,并在内部循环中迭代子数组。因此,您应该访问anArray[col][r];而不是您正在做的事情。你的代码应该是这样的:

public static void columnSum(int[][] anArray) {
    int sum = 0;
    for (int row = 0; row < anArray.length; row++) {

        for (int col = 0; col < anArray[row].length; col++) {
            sum += anArray[row][col];

        }

        System.out.println("Sum of row " + row + " = " + sum);
    }
    System.out.println();
}

如果您真的想要对该列求和,则应将代码修改为:

public static void columnSum(int[][] anArray) {
    int sum;
    // Assuming anArray is not empty
    for (int col = 0; col < anArray[0].length; col++) {
        sum = 0;
        for (int row = 0; row < anArray.length; row++) {   
            sum += anArray[row][col];
        }
         System.out.println("Sum of column " + col + " = " + sum);
    }

    System.out.println();
}