猿问

为什么 eclipse 说我的方法没有返回有效的结果?

一段时间以来,我一直在用 Java 为数独游戏编写此代码,但我不知道有什么问题,也许是“if”或 de“For”,但 IDE 说我的方法不返回布尔值类型。


// check if the number has already been used in the columns

private boolean checkColumns(int x, int y, int value) {

    for (int j = 0; j < 9; j++) {

        if (this.gridPlayer[j][y].getValue() == value) return false;

        else return true;

    }


    }

// Check if the number has already been used in the lines

private boolean checkLines(int x, int y, int value) {

    for (int i = 0; i <= 9; i++) {

        if (this.gridPlayer[x][i].getValue() == value) return false;

         else return true;

    }

    }


// Check if the number has already been used and the subGrid

private boolean checkSubGrid(int x, int y) {

    for (int i = 0; i <= 9; i++) {

        for (int j = 0; j <= 9; j++) {

            if (this.gridPlayer[x][y].getValueOfSubGrid(x, y) == this.gridPlayer[i][j].getValueOfSubGrid(i, j)) {

                if (this.gridPlayer[x][y].getValue() == this.gridPlayer[i][j].getValue()) {

                    return false;

                } else {

                    return true;

                }

            } else if (this.gridPlayer[x][y].getValueOfSubGrid(x, y) != this.gridPlayer[i][j].getValueOfSubGrid(i,

                    j)) {

                return true;

            }

        }

    }

}


Qyouu
浏览 157回答 2
2回答

GCT1015

欢迎,在您的checkSubGrid()方法中,如果运行时未在最后一个输入,您需要返回一个值else if: else if (this.gridPlayer[x][y]...) {如果方法不是void,则需要返回。&nbsp;if(a > 1) {&nbsp; &nbsp;return a;&nbsp;} else {&nbsp; &nbsp;return b;&nbsp;}在上面的这种情况下,我们有一个if - else语句,该方法将始终返回 true 或 false(或有异常)。&nbsp;if(a > 1) {&nbsp; &nbsp;return a;&nbsp;} else if(a == 0) {&nbsp; &nbsp;return b;&nbsp;}另一方面,该方法可以或不能进入第二个if,他们没有回报。您不能确保编译器会返回。您可以通过放置默认返回或放置 else 语句来解决此问题。&nbsp;if(a > 1) {&nbsp; &nbsp;return a;&nbsp;} else if(a == 0) {&nbsp; &nbsp;return b;&nbsp;} else {&nbsp; &nbsp;return null;&nbsp;}或者&nbsp;if(a > 1) {&nbsp; &nbsp;return a;&nbsp;} else if(a == 0) {&nbsp; &nbsp;return b;&nbsp;}&nbsp;return null;

幕布斯7119047

编译器假设它不是 100% 确定将调用“for”循环中的 return 语句,因此它看到的路径是您的方法不返回任何值,即使它们声明它们返回。您需要在循环之外有一些返回值,即使您确定这永远不会发生,即private boolean checkLines(int x, int y, int value) {&nbsp; for (int i = 0; i <= 9; i++) {&nbsp; &nbsp; if (this.gridPlayer[x][i].getValue() == value) return false;&nbsp; &nbsp; &nbsp;else return true;&nbsp; }&nbsp;return false; //even if you think it will never be run it is necessary&nbsp;}
随时随地看视频慕课网APP

相关分类

Java
我要回答