这个应该创建一个有效的数独字段。我已经删除了方格,这不是我现在遇到的问题的一部分,所以不要怀疑。
我的问题是,当无法正确添加 9 时,该方法会中断。我不知道如何让它回到前一点并计数,这将创建一个新的“路径”,所以我认为如果我做对了,一切都应该没问题。我仍在努力使用递归:-/
据我所知,我认为 sudokuCorrect() 做了它应该做的。编辑:您可以忽略布尔测试。我知道我不使用它,我试着想一些东西,但显然我不知道如何使用它。
输出是
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 2 | 1 | 4 | 3 | 6 | 5 | 8 | 7 | 9 |
分别当 squarechecker 被集成时,它看起来像
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 4 | 5 | 6 | 2 | 3 | 7 | 9 | 0 | 0 |
之后不管检查哪个变体。所以问题是一样的。
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
public static boolean sudoku(int i, int j) {
boolean test = false;
for (int n = 1; n < 10; n++) {
feld[i][j] = n;
if (sudokuCorrect(i, j)) {
if (j < 8) {
test = sudoku(i, j + 1);
} else if (i < 8) {
test = sudoku(i + 1, 0);
}
System.out.println(i + ", " + j);
if ((i == 8 && j == 8 && feld[i][j] > 0) || feld[i][j] > 0) {
return true;
} else {
return false;
}
}
}
if (test) {
return true;
} else {
return false;
}
}
public static boolean sudokuCorrect(int i, int j) {
for (int a = 0; a <= j; a++) {
map.get(i + 10).add(feld[i][a]);
}
if (map.get(i + 10).size() == j + 1) {
// wenn Zeilen korrekt sind, so prüfe Spalte
for (int a = 0; a <= i; a++) {
map.get(j).add(feld[a][j]);
}
if (map.get(j).size() == i + 1) {
return true;
}
}
map.get(i + 10).clear(); // leert das HashSet
map.get(j).clear();
return false;
}