我是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));
答案 0 :(得分:5)
查看你的数组
int[][] numbers3 = {{3}, {2, 4, 6}, {3, 6}, {3, 6, 9, 12}};
numbers3 [0]只有{3},这是一个1的数组大小。因此,调用数字[3] [x],其中x是0以外的任何值都会引发错误,因为它只有该元素。
您有两种选择:
仅使用具有相同数量元素的数组。
int[][] numbers3 = {{3,1,3}, {2, 4, 6}, {3, 6,5}, {3, 6, 9}};
添加支票并传入0而不是
if(nums[row].length > i)
sum = sum + nums[row][i];
这样,它永远不会尝试检查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;
}