比较块Sudoku Java中的整数

时间:2012-02-16 21:05:51

标签: java sudoku

您好我正在使用数独检查器来验证已完成的主板解决方案是否正确。我目前难以理解如何在街区内进行检查。现在我有一个布尔值如下 我在哪里检查左上方的区块(Block1)。我不确定的是设置它的参数以及如何成功运行两个for循环。

问题在于我想检查一个2d数组的一个部分,它也是一个3x3的正方形,看看该区域中的整数是否重复,只有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;
}

4 个答案:

答案 0 :(得分:3)

因为这是家庭作业,只是一个提示。模3(i % 3)和整数除以3(i / 3)可用于将0 ... 8的分数分成3部分并在该部分中作为索引。

答案 1 :(得分:0)

我不太确定你希望你给代码做什么。但是这种方法总是会返回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;

答案 2 :(得分:0)

IsValidRow方法中,您使用了两个嵌套循环。第一个循环遍及整行,第二个循环遍历行的其余部分以检查值是否重复。在isBlock1Valid方法中,您还使用两个嵌套循环。但是现在你使用外部循环作为y坐标,使用内部循环作为x坐标。他们一起做IsValidRow中的第一个循环。循环整个细胞群。你仍然需要实现第二个循环,它循环到框的其余部分。不幸的是,嵌套循环并不容易。但就像Joop Eggen所说,你可以使用模数和整数除法来获得你的坐标的不同视图。例如,您可以说j % 3 + (i % 3) * 3是框中(j, i)的索引。这样,您只需要两个循环,就像在IsValidRow中一样:

static boolean isBlock1Valid(int[][] sudokuBoard)
{
    for(int i = 0; i < 9; i++)
    {
        for(int j = i+1; j < 9; j++)
        {

            if(sudokuBoard[i/3][i%3] == sudokuBoard[j/3][j%3])
                return false;

        }
    }
}

答案 3 :(得分:0)

总结一下;如果45那么好,否则假 - 假设你已经检查了行和列,当然。此外,最好保留一个单独的网格,用一个唯一的数字表示每个区域,然后你可以做很多其他好东西,循环遍历它。