Как предотвратить перенос пользовательского ввода при возникновении исключения? - PullRequest
1 голос
/ 23 апреля 2019

Я не знаю, является ли это недостатком сна, но я просто не понимаю, почему это происходит.

У меня есть код, который запрашивает у пользователя значение int.Если пользователь наберет какую-нибудь глупую вещь, например «двадцать семь», вместо любого числа, он выдаст исключение InputMismatchException.Все это хорошо.

По какой-то причине пользовательское значение вводится в мой код, после чего все портится ...

case 'r':
     System.out.print("What height to reap at  : ");
         try {
             reapAt = keyboard.nextInt();
             canadaforestservice.reapTrees(initTreeHeight, initTreeGrowPerYear, reapAt);
             } catch (InputMismatchException e) {
             System.out.println("ERROR: Invalid height");
             }
             System.out.println();
             System.out.print("(D)isplay, (N)ew, (Y)ear, (R)eap, (S)ave, (L)oad, e(X)it : ");
             menuItems = keyboard.next().charAt(0);
             break;

Ожидаемый результат:

(D) isplay, (N) ew, (Y) ухо, (R) eap, (S) ave, (L) oad, e (X) it: r

На какой высоте пожинать:двадцать семь

ОШИБКА: Неверная высота

(D) - игра, (N) ew, (Y) ухо, (R) eap, (S) пр., (L) oad, e (X) it:


Мой результат:

(D) - игра, (N) ew, (Y) ухо, (R) eap, (S) пр., (L)oad, e (X) it: r

На какой высоте пожинать: двадцать семь

ОШИБКА: неверная высота

(D) isplay, (N)ew, (Y) ear, (R) eap, (S) ave, (L) oad, e (X) it: ОШИБКА: неверный параметр, повторите попытку "Буква T переносится из предыдущегопользовательский ввод "

(D) isplay, (N) ew, (Y) ear, (R) eap, (S) ave, (L) oad, e (X) it:

1 Ответ

0 голосов
/ 23 апреля 2019

Внутри catch (InputMismatchException e) добавьте следующую строку: keyboard.nextLine();, чтобы завершить чтение этой строки:

         // ...
         } catch (InputMismatchException e) {
           System.out.println("ERROR: Invalid height");
           keyboard.nextLine();
         }
         // ...

Возможно, вы захотите прочесть разницу между Scanner # nextInt () which

Сканирует следующий токен ввода как int

и Scanner # nextLine () which

Продвигает этот сканер после текущей строки и возвращает пропущенный ввод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...