如何检查2D数组中的对角线邻居并设置当前值等于邻居数量

时间:2014-10-18 20:06:31

标签: java arrays multidimensional-array

我正在尝试遍历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 

非常感谢任何建议。

1 个答案:

答案 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,因此预期和获得的输出之间存在差异。

创建一个单独的矩阵来存储修改后的值。