首页 > 解决方案 > 如何在 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) 替换它,程序会一直运行,直到没有正确的数字要填充,然后回溯不会开始。

谁能提供一个提示,我可以通过什么方式成功地转换这种方法?我将不胜感激,谢谢!

标签: javabooleanvoidrecursive-backtracking

解决方案


推荐阅读