Как проверить ввод пользователя с помощью try and catch? - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно написать программу, которая может проверять пользовательский ввод как целое число и предотвращать его сбой, если использование input не является целым числом. Поэтому я использую здесь try и catch. Однако я получил бесконечное l oop, когда пользовательский ввод не является целым числом. Ниже мой код

do {
    try {
        a = sc.nextInt();
    } catch (InputMismatchExpression e) {
        System.out.println("This is not integer");
    }
} while(a < 1 || a > 10);

Ответы [ 3 ]

0 голосов
/ 08 мая 2020

нормально использовать регулярное выражение, проверять вводимые пользователем данные, например:

String userInput = "1234567";
boolean isNumber = userInput.matches("^\\d+$");
System.out.println(isNumber);
0 голосов
/ 08 мая 2020

После того, как Сканер выдает исключение, существующее значение остается "неиспользованным". Чтобы избежать этого, вам нужно добавить строку s c .next (), чтобы использовать существующий ввод и заставить Scanner ожидать следующего значения от пользователя.

do {
    try {
        a = sc.nextInt();
    } catch (InputMismatchExpression e) {

        sc.next(); // this "consumes" the invalid input and throws away

        System.out.println("This is not integer");
    }
} while(a < 1 || a > 10);
0 голосов
/ 08 мая 2020

Если вы действительно хотите разбить l oop, если пользовательский ввод является нецелым числом, вы можете просто добавить значение флага в свой код:

int flag = 0;
do {
try {
    a = sc.nextInt();
} catch (InputMismatchExpression e) {
    System.out.println("This is not integer");
flag=1;
}
} while((a < 1 || a > 10)&&flag==0);

Если flag = 1, л oop сломается.

...