Как перестать пытаться поймать от бесконечного цикла - PullRequest
0 голосов
/ 22 декабря 2018

Попытка создать цикл, который будет повторяться, если введено что-либо, кроме 1 2 3 4 5, или если произойдет несоответствие входа.Я очень новичок, чтобы попытаться поймать, и мой учитель говорит, что мне нужно часто использовать их для этого задания.Я не уверен, почему это продолжает бесконечно повторяться.Я играл с этим часами, и каждое другое решение, которое, я думаю, у меня есть, заканчивается повторяющимся циклом, который печатает навсегда.Спасибо всем, кто может помочь.

do {
    System.out.printf("Please enter the number corresponding with with what would like to edit: %n1. Title%n2. Author%n3. Location%n4. Book Type%n5. Book Status%n");
    try {
        x = scan.nextInt();
        if (x != 1 && x != 2 && x != 3 && x != 4 && x != 5) {
            System.out.println("you must enter either 1 2 3 4 5");
        }
    } catch (Exception ex) {
        System.out.println("you must enter either 1 2 3 4 5");
        x = 0;
    }
} while (x != 1 && x != 2 && x != 3 && x != 4 && x != 5);

1 Ответ

0 голосов
/ 22 декабря 2018

Вам необходимо добавить scan.nextLine здесь:

} catch (Exception ex) {
    System.out.println("you must enter either 1 2 3 4 5");
    x = 0;
    scan.nextLine(); <----
}

Это потому, что если сканер читает что-то, что не является целым числом, он не будет использовать ввод, как задокументировано :

Сканирует следующий токен ввода как int.Этот метод вызывает исключение InputMismatchException, если следующий токен не может быть преобразован в действительное значение типа int, как описано ниже. Если перевод успешен, сканер продвигается дальше соответствующего ввода.

Так что в следующий раз, когда вы вызовете nextInt, сканер все еще попытается прочитать недопустимый int,что он не может сделать, создавая бесконечный цикл.

Добавление nextLine гарантирует, что недопустимый int используется.

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