java - 如何在 Java 中将布尔类型方法转换为 void 方法?
问题描述
我正在使用回溯为 Java 中的学校作业制作数独求解器。我已经使用布尔 solveSudoku()方法成功解决了它,但是在老师提供的模板中,该方法被列为void solveSudoku()。它在要求中清楚地说明了使用给定方法的要求,但是我很难更改我的代码。
这是我的初始方法:
(int[] findEmptySquare(),顾名思义,返回数独中下一个空单元格的索引。)
boolean solveSudoku() {
int[] arr = new int[2];
arr = findEmptySquare();
if (arr != null) {
for (int i = 1; i <= 9; i++) {
if (givesConflict(row, col, i) == false) {
int x = row, y = col;
grid[row][col] = i;
if (solveSudoku()) {
return true;
} else {
grid[row][col] = 0;
row = x;
col = y;
}
}
}
return false;
}
//solutionCounter++;
return true;
}
我试图在这样的 void 方法中模仿布尔操作方式:
boolean okay;
void solveSudoku() {
int[] arr = new int[2];
arr = findEmptySquare();
if (arr != null) {
for (int i = 1; i <= 9; i++) {
if (givesConflict(row, col, i) == false) {
int x = row, y = col;
grid[row][col] = i;
if (okay == true) { //line 11
solveSudoku();
okay = true;
return;
} else {
grid[row][col] = 0;
row = x;
col = y;
}
}
}
okay = false;
return;
}
okay = true;
return;
}
不幸的是,这并没有按预期工作。如果在第 11 行我用 if(okay == false) 替换它,程序会一直运行,直到没有正确的数字要填充,然后回溯不会开始。
谁能提供一个提示,我可以通过什么方式成功地转换这种方法?我将不胜感激,谢谢!
解决方案
推荐阅读
- laravel - Laravel如何在遇到重定向时进行测试预期状态码200但收到302
- python - 为什么下面的代码显示错误而不是全局范围?
- hardlink - 无法为 LXD 容器中挂载的主机文件建立硬链接
- css - 悬停动作移动文本。我如何解决它?
- c++ - 如何在另一个图像的开头关闭图像 - linux c ++
- .net - 如何仅将 Asp.Net Core Identity 与用户表一起使用
- angular - 离子滚动到虚拟滚动项目
- c# - 如何在 ComboBox (WindowsForm) 中启用 ctrl+c 快捷方式
- javascript - 我怎样才能按下元素键
- java - 无法在 rest api 中读取 InputStream 数据