Проблема с некоторой простой обработкой исключений с использованием .hasNextInt () в Java? - PullRequest
1 голос
/ 01 июня 2019

Я создаю список массивов для меню продуктов, которые соответствуют номеру в меню. Большая часть этого не учтена: моя главная проблема заключается в том, что сообщение об ошибке не отображается в первый раз, когда пользователь не вводит целочисленное значение. После нажатия клавиши Enter на консоли ничего не отобразится, но если я снова введу что-то, не являющееся целым числом, оно будет работать так, как должно, и отобразит сообщение об ошибке.

Редактировать: еще кое-что, что я должен отметить, это то, что ранее в коде я использовал тот же объект сканера, поэтому используйте .next (), чтобы очистить его от предыдущего значения.

        orderArray = new String[length];
        menuDisplay(); 
        int item; //the item number that user must enter
        for(int i=1; i<=length;i++)
        {
            System.out.println("Please choose item #"+ i+": ");
            scan.next();
            while(!scan.hasNextInt()) //this while loop checks that an integer value has been entered
            {
                System.out.println("Please enter an integer value from the above menu.");
                scan.next();
            }

        }

1 Ответ

1 голос
/ 01 июня 2019

hasNextInt проверяет следующий токен, а не только что полученный токен, поэтому всегда звоните hasNextXxx() до вызова nextXxx().

Вы также хотели бы получить целочисленное значение и присвоить его item.

Переставьте код следующим образом:

System.out.println("Please choose item #"+ i+": ");
while (!scan.hasNextInt()) //this while loop checks that an integer value has been entered
{
    System.out.println("Please enter an integer value from the above menu.");
    scan.next(); // skip bad token
}
item = scan.nextInt();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...