我正在尝试遍历2D数组并计算所有等于0的对角邻居,然后将当前位置设置为等于邻居数。例如:
0 5 0 9
0 5 0 3
1 9 4 6
7 0 0 9
应该改为
0 2 0 1
0 3 1 2
1 3 1 2
0 1 1 1
我正在使用以下代码(我捕获异常,因为所有参数号都会有索引超出范围的异常):
int row, col, count;
count = 0;
// Standard for-loop used in walking through a 2D array
for (row = 0; row < NUM; row++) {
for (col = 0; col < NUM; col++) {
// Check top left neighbor
try {
if (grid[row - 1][col - 1] == 0) {
count++;
}
} catch (IndexOutOfBoundsException e) {
} // Check bottom left neighbor
try {
if (grid[row - 1][col + 1] == 0) {
count++;
}
} catch (IndexOutOfBoundsException e) {
} // Check top right neighbor
try {
if (grid[row + 1][col - 1] == 0) {
count++;
}
} catch (IndexOutOfBoundsException e) {
} // Check bottom right neighbor
try {
if (grid[row + 1][col + 1] == 0) {
count++;
}
} catch (IndexOutOfBoundsException e) {
} // Set current place in the array equal to number of 0 neighbors
grid[row][col]=count;
count = 0;
}
}
问题是我的输出错了。而不是假设的代码,它改为以下:
0 2 0 1
0 3 1 2
1 2 1 1
0 0 0 0
所以前两行有效,然后第三行有几个OBO错误。不确定最后一行有什么问题,我不确定这是哪里出错的。
摘要
原文是:
0 5 0 9
0 5 0 3
1 9 4 6
7 0 0 9
那应该改为:
0 2 0 1
0 3 1 2
1 3 1 2
0 1 1 1
但我得到了:
0 2 0 1
0 3 1 2
1 2 1 1
0 0 0 0
另一个例子是:
原文:
5 0 0 3 9 5
0 0 9 5 3 0
0 0 0 9 7 3
7 0 5 0 9 5
0 0 3 0 0 0
9 5 0 3 7 0
更新:
1 1 1 0 1 0
1 2 2 1 2 0
1 0 2 0 2 0
2 1 4 1 4 1
0 1 0 1 1 0
0 2 0 1 1 0
非常感谢任何建议。
答案 0 :(得分:1)
你从
开始0 5 0 9
0 5 0 3
1 9 4 6
7 0 0 9
您从左上角 开始遍历并同时修改 矩阵。 因此,在修改了2行之后,中间矩阵就是
0 2 0 1
0 3 1 2
1 9 4 6
7 0 0 9
现在考虑index [2][1]
处的元素。在原始矩阵中,它有3 zero neighbors
,但此矩阵只有2
,因此预期和获得的输出之间存在差异。
创建一个单独的矩阵来存储修改后的值。