如何修复二维数组的ArrayIndexOutOfBoundsException

时间:2015-07-29 03:58:59

标签: java arrays

我是Java编程的初学者,我只是编写一个简单的程序来返回二维数组的第i列中的元素总和。

但我的一个测试用例给了我一个ArrayIndexOutOfBoundsException错误,如下所示:

发生问题的测试用例:

int[][] numbers3 = {{3}, {2, 4, 6}, {3, 6}, {3, 6, 9, 12}};
System.out.println(columnSum(3, numbers3));

这是我从此测试用例中收到的错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at Array.columnSum(Array.java:12)
    at Array.start(Array.java:6)
    at ArrayApp.main(ArrayApp.java:7)

我不知道如何解决这个问题...所以有人可以指出我的错误吗?谢谢!

这是我的代码:

    public class Array {

    public void start() {
        int[][] numbers3 = {{3}, {2, 4, 6}, {3, 6}, {3, 6, 9, 12}};
        System.out.println(columnSum(3, numbers3));
    }

    private int columnSum(int i, int[][] nums) {
        int sum = 0;
        for(int row = 0; row < nums.length; row++){
            sum = sum + nums[row][i];
        }
        return sum;
    }
}

以下是我使用过的一些工作正常的测试用例。

测试案例1:

int[][] nums = {{0, 1, 2, 3}, {2, 4, 6, 8}, {3, 6, 9, 12}};
System.out.println(columnSum(0, nums));

测试案例2:

int[][] nums2 = {{0, 1, 2, 3}, {2, 4, 6, 8}, {3, 6, 9, 12}};
System.out.println(columnSum(3, nums2));

2 个答案:

答案 0 :(得分:5)

查看你的数组

int[][] numbers3 = {{3}, {2, 4, 6}, {3, 6}, {3, 6, 9, 12}};

numbers3 [0]只有{3},这是一个1的数组大小。因此,调用数字[3] [x],其中x是0以外的任何值都会引发错误,因为它只有该元素。

您有两种选择:

  1. 仅使用具有相同数量元素的数组。

    int[][] numbers3 = {{3,1,3}, {2, 4, 6}, {3, 6,5}, {3, 6, 9}};
    
  2. 添加支票并传入0而不是

    if(nums[row].length > i)
        sum = sum + nums[row][i];
    
  3. 这样,它永远不会尝试检查nums[row]的无效索引。

答案 1 :(得分:1)

它正在发生,因为您的列长度在该示例中是不同的,因此第三列不存在。

private static int columnSum(int i, int[][] nums) {
    int sum = 0;
    for(int row = 0; row < nums.length; row++){
        if (i < nums[row].length) {
            sum = sum + nums[row][i];
        }
    }
    return sum;
}