当前位置: 首页 > 知识库问答 >
问题:

在数独中检查行的重复项

左丘成仁
2023-03-14

当我试图检查数独的行中是否有重复的元素时,结果什么也没有返回。不知道代码是否正确。如果在一行中找到重复的元素,则需要打印找到的重复项。使用方法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个答案

子车新立
2023-03-14

修改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;
}
寿伟
2023-03-14

花点时间阅读您的代码

 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个正方形组成,你不能在行、列或正方形中重复数字。

这是一个容易的问题,努力一点!

 类似资料:
  • 我曾经用C语言编写过一个数独谜题,但我陷入了一个问题:检查每个3x3网格是否没有重复的值。这是我的代码: 我知道在function Valid中,我应该有条件检查每个3x3网格,但我没有弄明白:我找到了创建一些变量开始和结束的解决方案,每个变量得到如下结果: 在我的例子中,i和j是ii和jj。 例如,我们发现了这样的东西: 我试过这个密码,但没用。 我不明白这一点:我有下一个数独矩阵: 如果我的代

  • 这个程序的作用: 这个程序从一个类中获取值,并使用这些值作为数独游戏的起始值。我们将在一个典型的数独9x9网格中打印这些内容。然后,程序会提示用户在网格上给出一个坐标点,并在其中输入一个值。目前我正在做的是确保用户输入的值对解决这个难题是有效的。填好拼图后,每列、每行和3x3方块中不再有任何重复值,游戏应结束,输出应为“拼图完成”。 到目前为止,我的程序成功地检查了列和行中的重复值,但我不知道从哪

  • 我有以下代码: 我要做的是检查文件是否在当前目录中。如果找不到,则创建该文件。 如果找到该文件,则在中下载spy ticker数据,并将该数据附加到中,并将其保存在csv文件中。 问题 我如何摆脱列,为什么会出现该列?

  • 问题内容: 我有一个有4000万行且没有主键的表。在添加主键之前,我想检查表中是否有重复的条目。当我说重复条目时,我不仅意味着在特定列上重复。我的意思是整行重复。 在上一个问题中,我被告知可以执行查询以确定重复项。我该怎么做? 我正在运行PostgreSQL 8.1.22。(通过运行获得此信息)。 问题答案: 要了解是否 任何 完整存在重复(在所有列相同),这可能是最快的方法: 这是一种非常方便的

  • 我正在尝试在python中创建一个数独检查器: 我期待这样的输入——一个9个列表的列表。零表示用户尚未填写的数字。它们可以在一行、一列或3x3中多次出现。 我显然需要检查是否有一个9x9列表(网格),以及每行、每列和3x3小正方形中是否没有重复项。在代码中,我首先检查行数是否正确(应该有9行)。然后我检查每一行中是否有9个元素(在病态示例中,您可以看到情况并非如此)。然后我尝试检查每一行中的重复项

  • 问题内容: 如何找到重复的行?如果last_name是重复字段,我想显示 任何数据库都可以,最好是oracle。 问题答案: 假设您的服务器具有GROUP_CONCAT,因为您没有提及正在使用的服务器: