2013-08-30 3 views
2

Это код:Метод возвращает Int тип, но я получаю «этот метод должен возвращать результат типа междунар» ошибка

private int getUpSite(int i, int j){ 
    if (i - 1 >= 1){ 
     if (grid[i - 2][j] != 0){ 
      return xyTo1D(i - 1, j); 
     } 
    } 
    else{ 
     return -1; 
    } 
} 

В зависимости от значений I и J, возвращается метод - 1 или другое целое число, построенное методом xyTo1D. Проблема заключается в том, что компилятор продолжает жаловаться: «этот метод должен возвращать результат типа int».

Что не так с кодом? Как это исправить?

ответ

6

Что произойдет, если элемент управления не войдет на второй уровень if?

if (grid[i - 2][j] != 0) 

Нет возвратного заявления, не так ли?

У вас должен быть оператор return для всех возможных путей.

Как исправить это?

Один из возможных способов:

return Добавить заявление для первого уровня, если слишком. Пример

if (i - 1 >= 1){ 
     if (grid[i - 2][j] != 0){ 
      return xyTo1D(i - 1, j); 
     } 
     return -1; //OR whatever int you would like to return 
    } 
+0

Это не хороший подход, чтобы использовать возврат на несколько блоков. Вместо этого мы должны использовать возвращаемую переменную уровня метода. Мы можем установить значение в этом. –

+1

@ GV: В этом вопросе есть большие дебаты. Некоторым людям нравится возвращаться из того, что когда-либо делалось, некоторые хотели бы вернуться в конце метода. Чтобы быть откровенным, я не хочу вникать в эту дискуссию. Как я сказал в своем ответе, это один из возможных способов, и есть несколько способов решить одну проблему. – kosa

+0

@ GV: Целая тема 20 или 30 лет. Не говорите мне, что кто-то воскресил его. Я думал, что это было разрешено, когда мы также решили, что методы должны быть короткими (что делает любой «возврат» заметным). Каковы аргументы обсуждения сейчас? –

1
private int getUpSite(int i, int j){ 
int returnVal = -1; 
    if (i - 1 >= 1){ 
     if (grid[i - 2][j] != 0){ 
      returnVal = xyTo1D(i - 1, j); 
     } 
    } 
return returnVal; 
} 
0
private int getUpSite(int i, int j){ 
    int returnValue=-1; 
    if (i - 1 >= 1 && grid[i - 2][j] != 0){ 
     returnValue = xyTo1D(i - 1, j); 
    } 
    return returnValue; 
} 
Смежные вопросы