2014-01-16 4 views
3
protected int readInt(String prompt) { 
    try { 
     System.out.print(prompt); 
     int i = keyboard.nextInt(); 
     keyboard.nextLine(); 
     return i; 

    } catch (java.util.InputMismatchException e) { 
     System.out.println("Error: Insert a number."); 
    } 
} 

Привет! Eclipse дает мне эту ошибку в методе readInt(): «Этот метод должен возвращать результат типа int». и дает примеры решений «Добавить оператор возврата» и «Изменить тип возврата на void». Я попытался поставить оператор return i из цикла try-and-catch, но когда я это сделаю, оператор return не сможет найти переменную i.Eclipse просит вернуть заявление, хотя у меня есть один

Я боролся с этим какое-то время и не могу заставить его работать ... Я был бы признателен за любую помощь! Спасибо.

ответ

1

В моем коде i объявлен за пределами блока try-catch, так что оператор возврата не будет иметь проблем с областью. Также ему присваивается значение -1, поэтому, если возникает исключение, функция возвращает -1 вызывающему.

protected int readInt(String prompt) { 
    int i=-1; 
    System.out.print(prompt); 
    try { 
     i = keyboard.nextInt(); 
     keyboard.nextLine();  
    } catch (java.util.InputMismatchException e) { 
     System.out.println("Error: Insert a number."); 
     keyboard.next(); 
    } 
    return i; 
} 
+0

Когда я пытаюсь это сделать, сообщение об ошибках бесконечно ... :( –

+0

@HannaMarlene После того, как InputMismatch 'keyboard' следует переместить в следующий токен. См. Отредактированный код. Надеюсь, это поможет. –

+0

@HannaMarlene: [Здесь] Http://stackoverflow.com/questions/4676345/endless-while-loop-problem-with-try-catch) - лучшее объяснение проблемы с циклом. –

2

Подумайте о том, что произойдет, если InputMismatchException происходит.

Ваш код будет ловить его, распечатать "Error: Insert a number.". И что потом? Ваша функция объявлена ​​для возврата int, и у нее есть путь, в котором она ничего не возвращает.

Вы должны либо вернуть значение, которое не может быть возвращено в противном случае, и указывает на ошибку, либо реконструировать исключение.

0

Поскольку вы потребляете InputMismatchException, он не будет знать, что возвращать в случае выброса InputMismatchException. Вы можете либо throw, либо Exception, либо иметь return в блоке catch.

0

Если метод, имеющий тип возвращаемого значения, JVM должен ожидать для возвращаемого значения после вызова этого метода, в этом случае return имеет только try {}. предположим, что в любом случае он не выполняет все утверждения в сегменте try, тогда нет типа возврата, вот почему вы получили ошибку компилятора. Вы можете либо поместить возвращение внутри сегмента поймать и попробовать сегмент или снаружи и попытаться поймать

1

После вашего улова блока добавить, наконец, блок с обратным утверждением:

protected int readInt(String prompt) { 
    int i = 0; 
    try { 
    System.out.print(prompt); 
    i = keyboard.nextInt(); 
    keyboard.nextLine(); 
    //return i; 

    } catch (java.util.InputMismatchException e) { 
    System.out.println("Error: Insert a number."); 
    } finally{ 
     return i; 

    } 

}

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

+1

В заключение все еще будет проблема с областью, в которой содержится оператор return. Поместите объявление для 'i' где-то подходящее. –

Смежные вопросы