在Sudoku中检查重复行的行

时间:2017-06-08 09:09:14

标签: java sudoku

当我试图检查Sudoku的行是否有重复的元素时,结果不会返回任何内容。不知道代码是否正确。如果在一行中找到重复元素,则需要打印重复发现。帮助我使用checkRow()方法获得解决方案。

public class Sudoku {
 public static void main(String... args) throws Exception
{
    Scanner scanner = new Scanner(System.in);        
    int[][] sudokuPuzzle = {    
                         {8, 1, 0, 0, 0, 0, 0, 3, 9},       
                         {0, 0, 0, 9, 0, 1, 0, 0, 0},                                                                                       
                         {3, 0, 5, 0, 0, 0, 4, 0, 1},
                         {0, 0, 9, 8, 0, 2, 7, 0, 0},
                         {0, 0, 0, 5, 0, 6, 0, 0, 0},
                         {0, 0, 4, 3, 0, 7, 1, 0, 0},
                         {1, 0, 8, 0, 0, 0, 9, 0, 2},
                         {0, 0, 0, 6, 0, 4, 0, 0, 0},
                         {2, 4, 0, 0, 0, 0, 0, 6, 5}
                    };  
    printSudoku(sudokuPuzzle);
int count = countCellsToFill(sudokuPuzzle);
System.out.println("Number of cells have to filled: " + count);
}
 public static void printSudoku(int[][] sudokuPuzzle)
 {
  for (int i = 0; i < sudokuPuzzle.length; i++)
    {
        if (i == 3 || i == 6)
            System.out.println("------------------------");
        for (int j = 0; j < sudokuPuzzle[i].length; j++)
        {
            System.out.format("%-2s", sudokuPuzzle[i][j]);
            if (j == 2 || j == 5 )
                System.out.print(" | ");
        }           
        System.out.println();   
    }      
}

 public static int countCellsToFill(int[][] sudokuPuzzle){
int count=0;
for(int[] sudokuPuzzle1 : sudokuPuzzle){
    for(int a: sudokuPuzzle1){
        if(a == 0){
            count++;
        }
    }
}
return count;
}
 public boolean checkRow(int[] sudokuPuzzle){
for (int row = 0; row < sudokuPuzzle.length; row++)
{
        int num = sudokuPuzzle[row];
            if (num == sudokuPuzzle[row])
            {
                return true;
            }    
}
return false;
}     
}

2 个答案:

答案 0 :(得分:2)

花一点时间阅读你的代码:

 public boolean checkRow(int[] sudokuPuzzle){
    for (int row = 0; row < sudokuPuzzle.length; row++)
    {
       int num = sudokuPuzzle[row];
       if (num == sudokuPuzzle[row])
       {
          return true;
       }    
    }
       return false;
 } 

你在这里做的是拿起第一个数字,在这种情况下是“8”,因为它位于你的位置“0”。然后,检查“8”是否在您的位置“0”上,当然,这将始终为真。

如果你想检查每行的数字,我建议你用它来分析它,也许是双倍的。所以你可以做你的9行,每行9个数字,并且要记住不要比较你刚才读的数字。

顺便说一句,如果你正在做数独游戏,你应该检查这个数字是否也出现在第一个方格中。 Sodukus由9个方块组成,你不能在行中重复数字,也不能在列中重复数字,也不能在正方形中重复。

这是一个容易出问题,有点挣扎!

答案 1 :(得分:0)

修改了checkRow方法以检查重复项 -

public boolean checkRow(int[] sudokuPuzzle) {
    for (int row = 0; row < sudokuPuzzle.length; row++) {
        for (int i = 0; i < sudokuPuzzle.length; i++) {
            if (i == row) {
                continue;
            }
            if (sudokuPuzzle[i] == sudokuPuzzle[row]) {
                return true;
            }
        }
    }
    return false;
}