在二维数组中查找重复的单元格 java

Find repeated cell in 2D array java

我有一个 3x3 矩阵:

 1 -1 0  0
 1  2 2  1
 1  1 1 -1
-1  0 3  6

我试图找到值 = -1 的单元格的对角线元素,并将对角线单元格 ([i-1][j-1],[i-1][j+1] ,[i+1][j-1],[i+1][j+1]) 值与 2. 到目前为止我已经实现了这个但似乎单元格 [1][2] 即第二行第三列, 与 2 个单元格成对角线,它们是 [0][1] 和 [2][3]。所以,我得到的数组应该是这样的:

 1 -1 0  0
 2  2 4  1
 1  2 1 -1
-1  0 6  6

看起来像这样:

 1 -1 0  0
 2  2 8  1
 1  2 1 -1
-1  0 6  6

即单元格 [1][2] 中的值是 8 而不是 4。那么我如何检查单元格是否已经访问过一次并乘以2以便它不能再次乘以。这是我试过的代码:

for (int i = 0; i <= x; i++) {
        for (int j = 0; j <= y; j++) {
            if (resultArray[i][j] == -1) {
                if (isAdjacent(i - 1, j - 1, x, y))
                    resultArray[i - 1][j - 1] *= 2;
                if (isAdjacent(i - 1, j + 1, x, y))
                    resultArray[i - 1][j + 1] *= 2;
                if (isAdjacent(i + 1, j - 1, x, y))
                    resultArray[i + 1][j - 1] *= 2;
                if (isAdjacent(i + 1, j + 1, x, y))
                    resultArray[i + 1][j + 1] *= 2;
            }
        }
    }
return resultArray;

static boolean isAdjacent(int i, int j, int x, int y) {
    boolean flag = false;
    if (i >= 0 && i <= x && j >= 0 && j <= y) {
        flag = true;
    }
    return flag;

}

在与 -1 成对角线的位置创建一个带有 true 或 false 的二维布尔数组,然后通过将矩阵中所有位于 true 位置的数字乘以 2 来更新矩阵。这样,任何值都不会乘以两次。

所以你可以初始化布尔数组:

boolean diagonalsArray[][] = new boolean[x][y];

然后而不是乘以位置

resultArray[i + 1][j + 1] *= 2;

在布尔数组中将这些位置设置为 true:

diagonalsArray[i + 1][j + 1] = true;

在你的 for 循环和 return resultArray 之间,做所有的乘法

for (int i = 0; i <= x; i++) {
        for (int j = 0; j <= y; j++) {
               if(diagonalsArray[i][j]){
                    resultArray[i][j] *= 2;
                 }
            }
    }