Почему затмение говорит, что мой метод не возвращает действительный результат? - PullRequest
0 голосов
/ 03 октября 2018

Некоторое время я делал этот код в java для игры в судоку, и я не знаю, в чём дело, возможно, это "если" или де "за", но 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 голосов
/ 03 октября 2018

Добро пожаловать,
в вашем методе checkSubGrid() необходимо вернуть значение, если среда выполнения не вводит в последний else if: else if (this.gridPlayer[x][y]...) {

Если метод не void,вам нужно поставить return.

 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;
0 голосов
/ 03 октября 2018

Компилятор предполагает, что он не уверен на 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 
}
...