int[][] array = new int[][] { { 1, 2, 3 },
{ 5, 6, 7 },
{ 9, 0, 1 }
};
给出这个2D数组和一个位置,例如:[0][2]
或3,我可以使用哪种for循环算法来获取相邻元素的总和。它应该是3 + 2 + 6 + 7 = 18
。边界确实很重要,但我对求和部分最感兴趣。
答案 0 :(得分:2)
private static final int X_SIZE = 3;
private static final int Y_SIZE = 3;
private static int sumAdj(int x, int y, int[][] array) {
int sum = 0;
for (int i = Math.max(x-1, 0); i <= Math.min(x+1, X_SIZE -1); i++) {
for (int j = Math.max(y-1, 0); j <= Math.min(y+1, Y_SIZE-1); j++) {
sum += array[i][j];
}
}
return sum;
}
基本上,您想循环其中心是您指定的点的正方形,这意味着min x是中心的x-1,max x是中心的x + 1,与y相同。我正在使用Math.min和Math.max来考虑边界,您可以使用if语句在for循环外定义最小和最大坐标,但是我发现这种方式更优雅。