Как обработать исключения, если пользователь ввел число в место букв?
есть метод, который запрашивает у пользователя данные (Имя,Фамилия, Год рождения, Год начала работы) мне надо обработать исключения, если пользователь ввел в место чисел буквы(год рождения и год начало работы) и обработать если ввел буквы вместо чисел. как это правильно сделать? мой код:
public class Employee {
public void readData(){
Scanner scanner = new Scanner(System.in);
try {
System.out.println("Введите дата рождения: ");
int birthDate = Integer.parseInt(scanner.next());
System.out.println("Введите начало год работы: ");
int startWorking = Integer.parseInt(scanner.next());
if (birthDate > 2021 || startWorking > 2021){
System.out.println("Are you from future?! ");
scanner.close();
}
if(startWorking - (2021 - birthDate) > birthDate){
System.out.println("Не коректные данные!");
scanner.close();
}
System.out.println("Введите имя: ");
String name = scanner.next();
System.out.println("Введите фамилию:");
String lastName = scanner.nextLine();
scanner.close();
}
catch (NumberFormatException | InputMismatchException exception){
System.out.println("Введите коректные данные!");
}
}
}
Ответы (2 шт):
Автор решения: Zhenyria
→ Ссылка
Попытайтесь распарсить входную строку при помощи Integer.parseInt(). Если формат строки не будет соответствовать числу, будет выброшена ошибка NumberFormatException. Вы можете перехватить её при помощи try...catch:
try {
Integer num = Integer.pasrseInt(str);
} catch (NumberFormatException e) {
// действия по обработке ошибки
}
Автор решения: pazukdev
→ Ссылка
Если при невалидном вводе нужно именно кидать эксепшн, то:
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
System.out.println("Insert int value");
printValidValue(sc, "[0-9]+");
System.out.println("Insert name");
printValidValue(sc, "[a-zA-Z]+");
}
}
static void printValidValue(Scanner sc, String pattern) {
while (sc.hasNextLine()) {
try {
System.out.println("Value accepted: " + sc.next(pattern));
break;
} catch (InputMismatchException e) {
System.out.println("Invalid value");
sc.nextLine();
}
}
}