[英]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.