在2D数组java中查找重复的单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在2D数组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循环和返回resultArray之间,做所有的乘法运算

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

以上是关于在2D数组java中查找重复的单元格的主要内容,如果未能解决你的问题,请参考以下文章

无法统一引用游戏对象的 2D 数组

在选定 Excel 列的单元格中查找并突出显示重复的单元格和文本字符串

试图在列的每个单元格中查找重复的逗号分隔文本

手机wps如何查找相同内容?

在excel列中查找重复单元格

在ListView单元格中重复数组元素会发出解析服务器