【问题标题】:Java 2D array: summing columns and displaying array problemsJava 2D 数组:对列求和并显示数组问题
【发布时间】:2015-07-03 20:29:56
【问题描述】:

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

这是错误消息。

线程“主”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();
}

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

有人知道吗?

【问题讨论】:

  • sum += anArray[col][r] 我想。
  • 不不不~当我输入 2 行和 3 列时,我的程序没有给我第 3 列的总和
  • 我的评论正在修复ArrayOutOfBoundException btw。因为当您输入 2 行和 3 列时,您正在计算 3 行和 2 列的总和。更改循环。
  • 在 Java 中有编译和运行时。我认为您的意思是这是一个运行时问题,而不是编译器问题。

标签: java arrays matrix


【解决方案1】:

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

sum += anArray[col][r]

这就是当列和行大小相同时它运行的原因。当它们的长度不同时,例如 5 列和 3 行,您的代码将尝试在其中一次迭代中访问 anArray[3][5] 并且该元素不存在,因此出现异常。

【讨论】:

  • nope nope~ 当我输入 2 行和 3 列时,我的程序没有给我第 3 列的总和,而是第 2 列的总和。而且计算也是错误的。
  • 您要获取列的总和?
  • 是的,先生。我的获取行总和的方法代码工作正常,但 columnSum 方法让我头疼......
【解决方案2】:

您的循环顺序错误。在外部循环中,您正在迭代数组长度,而在内部循环中,您正在迭代子数组。因此,您应该访问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();
}

【讨论】:

  • 是的,我有这个用于 rowSum 方法,它当然可以完美运行。但是,我正在尝试获取 columnSum,而不是 rowSum
  • 谢谢!!我现在真的很接近答案了。您的代码看起来很漂亮并且可以正常工作,但是它给了我从 column2 的总和计算错误。不过,它给了我正确计算第 1 列总和的方法。例如,当我的二维数组是 [[1, 2, 3], [4, 5, 6]] (2 行,3 列)。输出是第 1 列的总和 = 5,第 2 列的总和 = 12,第 3 列的总和 = 21。我怎么会得到这个结果..?这对我来说没有意义。
  • 我的错。您必须在每次迭代中将 sum 的值设置为 0。我编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2021-09-11
  • 2018-07-03
  • 2015-07-09
相关资源
最近更新 更多