假设存在一个 2D Java 数组(用于表示目的为 4x6),其中按随机顺序填充了从 1 到 9 的数字。
如果想要计算该数组中所有数字组的单独总和该怎么办?
在这种特殊情况下:
- 蓝色区域的总和
- 紫色区域的总和
- 红色区域的总和
- 黄色区域的总和
- ...
以下代码适用于任何数组,但前提是每个条目正好是 1x1 大,这在本例(以及任何其他情况)下毫无用处,因为它只是遍历所有条目。
for (int a = 0; a < x; a++) {
for (int b = 0; b < y; b++) {
sum = array[a][b];
}
}
如何让它遍历条目组,然后对单个组中的所有值求和?
最佳答案
startx
、starty
、endx
、endy
就是答案。您将从 start
迭代到 end
。这确实需要您知道(或能够计算)这些变量。如果不是,请澄清确切的结构。
如果您的数组声明如下:
int[][] matrix = new int [4][6];
一个粗略的例子:
public int sumOfSubMatrix (int startx, int starty, int endx, int endy) {
int sum = 0;
for (int x = startx; x <= endx; x++) {
for (int y = starty; y <= endy; y++) {
sum += matrix[x][y];
}
}
return sum;
}
您只需将每个“单元格”添加到 sum 变量即可。
现在,如果“颜色”分散,即使有一个单元格关闭,那么算法就必须处理其中的某些内容,例如它们的位置,这是不可能的。如果结构 100% 困惑,那么最好的选择是使用 if-guard
进行暴力破解。
关于Java 2D 数组 : Go through groups of entries and sum their values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277410/