我应该制作一个程序来添加2D矩形阵列中的所有元素,但这个答案应该是31,而不是打印33。 我做错了什么?
下面是代码:
public static int sum(int[][] array) {
int[][] numArray = {
{3, -1, 4, 0},
{5, 9, -2, 6},
{5, 3, 7, -8}
};
int sumOfRow = 0;
for (int i = 0; i < numArray.length; i++) {
sumOfRow += numArray[0][i];
sumOfRow += numArray[1][i];
sumOfRow += numArray[2][i];
}
System.out.println(sumOfRow);
return sumOfRow;
}
答案 0 :(得分:4)
numArray.length
是行数,您的代码将其视为列数,因此您忽略每行的最后一列。给定行中的列数为numArray[i].length
。
您应该使用嵌套循环:
for (int i = 0; i < numArray.length; i++) {
for (int j = 0; j < numArray[i].length; j++) {
sumOfRow += numArray[i][j];
}
}
答案 1 :(得分:2)
numArray.length
是外部数组的长度,您应该使用numArray[0].length
代替numArray.length
,这应该会给您预期的结果。
如果你使用的是java 8,这就是解决方案:
int sum = Arrays.stream(numArray)
.mapToInt(arr->IntStream.of(arr).sum()) // sum the inner array
.sum(); // sum the outer array
答案 2 :(得分:2)
正如其他人已经提到的那样,col1 col2 col3
1 2 3
4 5 6
指的是行数(或者换言之,numArray.length
中引用所引用的其他数组的数量),并且您的代码将其视为列数和因为行数少于列而得到的结果不合预期。
然而,任何二维数组的第一个索引应该是行索引,第二个索引应该指示列索引。 Eran的回答表明了如何解决当前的问题。
但是,我只是想在Java-8 +中提供另一个更理想的解决方案来对二维数组的元素求和。
numArray
它更理想,因为int sum = Arrays.stream(numArray)
.flatMapToInt(Arrays::stream)
.sum();
是完成此类工作的完美方法,只需调用flatMapToInt
终端操作即可呈现所需的结果。