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

时间:2018-10-03 14:10:37

标签: java arrays for-loop if-statement return

一段时间以来,我一直在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;
            }
        }
    }
}

2 个答案:

答案 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;