一段时间以来,我一直在Java中为Sudoku游戏编写此代码,但我不知道出了什么问题,也许是“ if”或“ 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;
}
}
}
}
答案 0 :(得分:0)
编译器假定它不是100%确定来自内部的return语句 您的“ for”循环将被调用,因此会看到一条路径,即使您的方法声明了,该方法也不会返回任何值。
即使您确定这种情况永远不会发生,也需要在循环之外具有一些返回值。
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;
}
return false; //even if you think it will never be run it is necessary
}
答案 1 :(得分:0)
欢迎,
如果运行时未在最后一个checkSubGrid()
中输入,则需要在else if
方法中返回一个值:
else if (this.gridPlayer[x][y]...) {
如果该方法不是void
,则需要输入一个返回值。
if(a > 1) {
return a;
} else {
return b;
}
在上述情况下,我们有一个if - else
语句,该方法将始终返回true或false(或有异常)。
if(a > 1) {
return a;
} else if(a == 0) {
return b;
}
另一方面,该方法可以或不能输入第二个if
,因为它们没有返回值。您不确定不确定编译器是否会返回。
您可以解决此问题,方法是使用默认返回值或使用else语句。
if(a > 1) {
return a;
} else if(a == 0) {
return b;
} else {
return null;
}
或
if(a > 1) {
return a;
} else if(a == 0) {
return b;
}
return null;