簡體   English   中英

在2D數組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的二維布爾數組,然后通過將矩陣中真實位置的所有數字乘以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;
                 }
            }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM