gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:35:09 25 4
gpt4 key购买 nike

我有 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 的二维 boolean 数组,然后通过将矩阵中 true 位置处的所有数字乘以 2 来更新矩阵。这样,任何值都不会被乘以两次。

因此您可以初始化 boolean 数组:

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

然后不是将位置相乘

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

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

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

在 for 循环和返回 resultArray 之间,进行所有乘法

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

关于java - 在二维数组java中查找重复单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48998853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com