[英]Sum of all elements in Rectangular 2D array
我应该制作一个程序来添加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;
}
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];
}
}
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
正如其他人已经提到的那样, numArray.length
指的是行数(或者换句话说,是numArray
引用引用的其他数组的数量),并且您的代码将其视为列数,因为行数较少你可以获得不期望的结果。
然而,任何二维数组的第一个索引应该是行索引,第二个索引应该指示列索引。 Eran的回答表明如何解决您当前的问题。
但是,我只是想在Java-8 +中提供另一种更理想的解决方案来对二维数组的元素求和。
int sum = Arrays.stream(numArray)
.flatMapToInt(Arrays::stream)
.sum();
它更理想,因为flatMapToInt
是这种类型作业的完美方法,只需调用sum
终端操作就可以呈现所需的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.