Обработка ошибок Java.util.scanner

Я помогаю другу с проблемой Java. Однако мы наткнулись на препятствие. Мы используем Java. Util. Scanner.nextInt () для получения числа от пользователя, спрашивая continiously, если пользователь дает что-либо еще. Только проблема, мы не можем выяснить, как сделать ошибку handeling.

Что мы попробовали:

do {
  int reloop = 0;
  try {
    number = nextInt(); 
  } catch (Exception e) {
    System.out.println ("Please enter a number!");
    reloop ++; 
  }
} while(reloop != 0);

Только проблема, это циклично выполняет indefinatly при вводе в чем-то не номера.

Какая-либо справка?

6
задан CtrlX 10 November 2015 в 03:28
поделиться

1 ответ

Вы можете использовать hasNextInt () , чтобы убедиться, что Сканер завершится успешно, если вы выполните nextInt () . Вы также можете вызвать и отбросить nextLine () , если хотите пропустить «мусор».

Итак, что-то вроде этого:

Scanner sc = new Scanner(System.in);
while (!sc.hasNextInt()) {
   System.out.println("int, please!");
   sc.nextLine();
}
int num = sc.nextInt();
System.out.println("Thank you! (" + num + ")");

См. Также:


Проблема с вашим кодом, помимо излишне подробной обработки ошибок, потому что вы позволяете nextInt () генерировать исключение InputMismatchException вместо проверки hasNextInt ( ) , заключается в том, что когда он вызывает исключение , вы не продвигаете сканер за проблемный ввод! Вот почему получается бесконечный цикл!

Вы можете вызвать и отбросить nextLine () , чтобы исправить это, но даже лучше, если вместо этого вы будете использовать без исключений метод предварительной проверки hasNextInt () , представленный выше.

13
ответ дан 8 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: