«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как предотвратить бесконечные циклы при обработке исключения InputMismatchException в Java?

Как предотвратить бесконечные циклы при обработке исключения InputMismatchException в Java?

Опубликовано 23 декабря 2024 г.
Просматривать:399

How to Prevent Infinite Loops When Handling InputMismatchException in Java?

Бесконечный цикл в блоке try/catch с InputMismatchException: решение

Ваша Java-программа сталкивается с бесконечным циклом при обработке исключения InputMismatchException в попытке /catch блок, принимая целочисленные данные от пользователя. Такое поведение связано с тем, что после перехвата исключения InputMismatchException сканер остается в недопустимом состоянии, что приводит к бесконечному повторению цикла.

Чтобы решить эту проблему, необходимо выполнить следующие операции внутри блока catch. :

catch (InputMismatchException e) {
    System.out.println("Error!");
    input.next(); // Move to the next line to avoid the infinite loop
}

Метод input.next() перемещает указатель сканера на следующую строку, эффективно отбрасывая любой недопустимый ввод, вызвавший исключение.

В качестве альтернативы вы можете использовать метод hasNextInt() перед пытается прочитать целое число, тем самым гарантируя, что считываемое значение действительно является целым числом. Этот подход полностью устраняет необходимость обработки исключений:

while (true) {
    if (input.hasNextInt()) {
        n1 = input.nextInt();
        break;
    } else {
        input.next(); // Skip non-numeric input
    }
}

Помните, что в документации сканера Java указано, что после создания исключения InputMismatchException сканер не будет передавать токен, ответственный за исключение, и требует его получения или обхода другими способами. Внедрение этих модификаций должно смягчить проблему бесконечного цикла в вашей Java-программе.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3