java - 我的解决方法出错并且不打印真假
问题描述
我有一个数独求解器。我努力让代码工作。
这是我主要的印刷品
public static void main(String args[]) throws IOException {
int[][] newBoard = getFile("src/test/resources/2F.txt");
Sudoku sdk = new Sudoku(newBoard);
sdk.showSudoku();
}
这是我的数独课
class Sudoku {
private static int sudokuArray[][];
private int[][] board;
private static final int SIZE = 9;
public Sudoku (int[][] s) {
// ENTER CODE HERE
//board = sudokuArray;
//solveSudoku(s);
this.board = s;
}
public void showSudoku() {
// ENTER CODE HERE
if (solveSudoku(board)) {
System.out.println("Solved successfully!");
System.out.println("True");
}
else {
System.out.println("Unsolvable board");
System.out.println("False");
}
}
public boolean solveSudoku(int[][] board) {
for(int i = 0; i < SIZE; i++) {
for(int j = 0; j < SIZE; j++) {
if(board[i][j] == 0) {
for (int num = 1; num <= 9; num++) {
if (isValidSolution(board, i, j, num)) {
board[i][j] = num;
if(solveSudoku(board)) {
return true;
} else {
board[i][j] = 0;
}
}
}
return false; // no solution
}
}
}
return true; // valid solution
}
private static boolean isValidSolution(int[][] board,int i,int j,int c) {
/* Check rows */
// ENTER CODE HERE
for (int row = 0; row < 9; row ++) {
if(board[row][j] == c)
return false;
}
/* Check columns */
// ENTER CODE HERE
for (int col = 0; col < 9; col++) {
if(board[i][col] == c)
return false;
}
/* Check subgrids */
// ENTER CODE HERE
for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row ++) {
for(int col = j/3*3; col < j/3*3+3; col++){
if(board[row][col] == c)
return false;
}
}
return true;
}
}
如何打印结果和真/假。我的代码中有一个错误来检查有效的解决方案。出于某种原因,一切都变得真实。另外,我在第 16,18 行遇到了一个 io 异常,因为我要接受 new String[]{"src/test/resources/1F.txt"}) 作为输入并使用它。
9 5 7 6 1 3 2 8 4
4 8 3 2 5 7 1 9 6
6 1 2 8 4 9 5 3 7
1 7 8 3 6 4 9 5 2
5 2 4 9 7 1 3 6 8
3 6 9 5 2 8 7 4 1
8 4 5 7 9 3 6 1 3
2 9 1 4 3 6 8 7 5
7 3 6 1 8 5 4 2 9
Solved successfully!
True
以上是我的结果。如何在不从 getFile 打印板的情况下获取文件并使用它。
解决方案
推荐阅读
- magento - 在 magento 1.9 中更改国家/地区时未显示运费
- python - 如何使用 ansible 正确升级 pip?
- java - 如何处理 RecyclerView 中的点击事件
- android - 有什么方法可以检查 WorkManager 是否正常工作?
- android - 如何在服务的主要活动中使用相同的对象
- c# - 如何将临时变量声明为 C# 表达式?
- java - 是否可以抑制 bean 注入?
- magento2 - 如何在我的自定义小部件中呈现产品列表
- c# - 获取名称包含某些字符串的 Json 属性
- javascript - 为什么 JavaScript 添加的按钮没有默认间距?