Почему у меня бесконечный цикл do-while?

У меня есть неработающий цикл do-while. Когда я ввожу String вместо int, он должен сказать "bla" и снова попросить вставить число, но вместо этого он снова и снова отправляет текст сообщения. Что не так в этом коде?

    boolean i = true;
    do {
       i = false;  

       try {
           System.out.println("insert number");
           int k = sc.nextInt();  
       }
       catch(InputMismatchException e) {
           System.out.println("test");
           i = true;
       } 
   } while ( i== true);

person Pedro Costa    schedule 01.07.2013    source источник
comment
См. docs.oracle.com/javase/7/docs. /api/java/util/Scanner.html: When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.. Итак, вам нужно пропустить токен, как только вы получите InputMismatchException.   -  person Andreas Fester    schedule 01.07.2013


Ответы (1)


Вам нужно сделать sc.nextLine() в блоке catch, чтобы очистить ошибочный ввод. Вызов nextInt() оставит ввод в буфере, если он не соответствует шаблону int.

person Russell Zahniser    schedule 01.07.2013
comment
это действительно помогло: D большое спасибо! это было непросто. - person Pedro Costa; 01.07.2013
comment
совет: i уже является логическим значением, поэтому вам не нужно (i == true). Вместо этого используйте while(i). - person Fernando; 01.07.2013