Я хочу проверить вход пользователя с помощью механизма обработки исключений.Как подтвердить ввод пользователя и снова ввести их ввод, если он недействителен, используя try-catch?
Например, предположим, что я прошу пользователя ввести целочисленный ввод и ввести символ. В этом случае я хотел бы сказать им, что они ввели неправильный ввод, и в дополнение к этому, я хочу, чтобы они предложили им прочитать в целое число снова и продолжать делать это до тех пор, пока они не введут приемлемый ввод.
Я видел некоторые подобные вопросы, но они снова не принимают вход пользователя, они просто распечатывают, что вход неверен.
Использование делать-то время, я хотел бы сделать что-то вроде этого:
Scanner reader = new Scanner(System.in);
System.out.println("Please enter an integer: ");
int i = 0;
do {
i = reader.nextInt();
} while ( ((Object) i).getClass().getName() != Integer ) {
System.out.println("You did not enter an int. Please enter an integer: ");
}
System.out.println("Input of type int: " + i);
ПРОБЛЕМЫ:
InputMismatchException
будет поднят на 5-й линии, перед проверкой заявленияwhile
состояние достигнут.Я действительно хочу научиться делать проверку ввода с использованием идиом обработки исключений.
Таким образом, когда пользователь вводит неправильный ввод, как я (1) сказать им, что их вклад является некорректным и (2) еще раз перечитал их ввода (и продолжать делать, что пока они не ввести правильный вход), используя механизм try-catch?
EDIT: @Italhouarne
import java.util.InputMismatchException;
import java.util.Scanner;
public class WhyThisInfiniteLoop {
public static void main (String [] args) {
Scanner reader = new Scanner(System.in);
int i = 0;
System.out.println("Please enter an integer: ");
while(true){
try{
i = reader.nextInt();
break;
}catch(InputMismatchException ex){
System.out.println("You did not enter an int. Please enter an integer:");
}
}
System.out.println("Input of type int: " + i);
}
}
Но 'в то время (правда)' бесконечный цикл – Solace
@Solace Нет, потому что 'break' выйдет из него всякий раз, когда исключение не выдается (то есть вход является целое). – ltalhouarne
Я тестировал ваш код, и он вводит бесконечный цикл, хотя и не там, где я (ошибочно) был expcted, но в блоке catch. Он продолжает печатать 'Вы не вводили int. Введите целое число: '. См. Редактирование в вопросе. Но почему это происходит не по себе. – Solace