检查数独中的重复行

Checking row for duplicates in 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;
}     
}

修改了您的 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;
}

花点时间阅读您的代码:

 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”上,当然,这将始终为真。

如果你想检查每行的数字,我建议你用一个 double for 来分析它。所以你可以做你的 9 行,每行 9 个数字,并且要记住不要将你刚刚阅读的数字与他自己进行比较。

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

这是个简单的问题,有点难度!