2013-12-19 1 views
0

Может кто-нибудь сказать мне, как это предотвратить:Как остановить исключение, если тип в неправильном типе данных с помощью сканера

"Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:909) at java.util.Scanner.next(Scanner.java:1530) at java.util.Scanner.nextInt(Scanner.java:2160) at java.util.Scanner.nextInt(Scanner.java:2119) at JeffSky.main(JeffSky.java:25)" , когда пользователь вводит букву в течение междунар.

В основном я пытаюсь выяснить, как поддерживать работу программы, даже если введен неправильный тип данных. Так же, как вы можете сделать оператор if, чтобы уведомить пользователя, это запрещено, если они вводят int вне заданного диапазона, например, от 1 до 10.

для (INT х = 1, х = < 3; х ++) {

int guess; 
     System.out.print("Your chosen trap is: "); 

     do{ 
      guess=sean.nextInt(); 

      if(guess>=1 && guess<=6){ 
       //do nothing if is a valid number i.e a trap between 1 and 6. 
      }           
      else { 
       System.out.print("Has to be between 1-6. Try again: "); 
      } 
     } 

     while(guess<1 || guess>6); 

Приветствия

+0

Что такое 'sean', и где вы его инициализируете? – Xynariz

+0

это сканер Сканер sean = новый сканер (System.in); – user3111329

ответ

4

InputMismatchException from nextInt означает, что вход не является int. You can catch it.

Это будет цикл до ввода является число между 1 и 6:

do { 

    try { 
     guess = sean.nextInt(); 

     if (guess >= 1 && guess <= 6) break; 

    } catch (InputMismatchException e) { 
    } finally { 
     sean.nextLine(); 
    } 

    System.out.print("Input must be a number between 1 and 6: "); 
} while (true); 

Примечание стороны: вызов nextInt также сирота новый характер линии, так nextLine продвигается мимо него.

+0

Это прекрасно работает, спасибо. – user3111329

2

Эта ошибка обычно генерируется при использовании методов, как scanner.nextInt();. Если вы хотите избежать этого, используйте что-то вроде String input = scanner.next(), затем проверьте input, чтобы узнать, может ли он быть представлен как Integer.

+0

спасибо за ваше предложение я есть это ниже есть в любом случае я могу это сделать, как ИНТ вы знаете, для (INT х = 1, х <= 3; х ++) { \t \t \t \t \t \t INT догадка; \t \t \t System.out.print («Ваша выбранная ловушка:»); \t \t \t \t \t \t сделать { \t \t \t \t догадка = sean.nextInt(); \t \t \t \t \t \t \t если (угадайте> = 1 && предположение <= 6) {\t \t \t \t \t \t // ничего не делать, если есть действительное число т.е. ловушку между 1 и 6. \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t еще { \t \t \t \t \t System.out.print ("Должен быть между 1-6.Попробуйте еще раз: «); \t \t \t \t} \t \t \t} \t \t \t \t \t \t в то время как (угадайте <1 || guess> 6); – user3111329

+0

Это именно то, что я говорил об изменении' guess' в 'String. '.Настроим' scan.nextInt(); 'to' scan.next(); '. Проверьте, является ли' guess' представляет Integer, и если это так, создайте новый 'int' (возможно, он называется guessInt) и сохраните целочисленное значение 'guess' в этом новом' int' (я дам вам понять, как это сделать, это хороший опыт обучения). – Xynariz

+0

жаль, что код в a Бове комментарий. – user3111329

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