当列数和行数相同时,此代码可以正常工作。当它们不同时会在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();
}
我不知道为什么我的代码在列数多于行数时不起作用,反之亦然。
有人有想法吗?
答案 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();
}