您好,我正在使用Sudoku Checker来验证完成的电路板的解决方案是否正确。我目前很困惑如何在块内进行检查。现在我有一个布尔值如下
我在这里检查左上方的块(Block1)。我不确定要设置哪些参数以及如何成功运行两个for循环。

问题是我想检查浓缩为3x3正方形的2d数组的一部分,看看该区域中的整数是否不重复,只有1-9出现一次。我有类似的代码,我在其中编写了此代码,以检查行是否具有重复的整数和一列。

static boolean isBlock1Valid(int[][] sudokuBoard, int referenceRow, int referenceColumn)
{

    for(int i =0; i<2;i++){
        for(int j=0; j<2; j++){
            if(sudokuBoard[i][j]==sudokuBoard[i][j])
                return false;
        }
    }
    return true;
}//end of isBlock1Valid


这是我用作制作块检查器的参考的行检查器

       static boolean IsValidRow(int[][] sudokuBoard, int referenceRow, int width)
{
    //Compare each value in the row to each other
    for(int i = 0; i < width; i++)
    {
        for(int j = i+1; j < width; j++)
        {

            if(sudokuBoard[referenceRow][i] == sudokuBoard[referenceRow][j])
                return false;

        }
    }

    return true;
}

最佳答案

我不太确定要给定代码做什么。但是此方法将始终返回false。

如果要确保一个块中每个元素只有一个实例。那么一种解决方法就是拥有一种清单:

boolean[] seen = new boolean[9];

for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
        if (seen(sudokuBoard[referenceColumn+i][referenceRow+j])) return false;
        else seen[sudokuBoard[referenceColumn+i][referenceRow+j]) = true;
return true;

10-07 19:48