Java обработка исключений при вводе недопустимых значений
Подскажите пожалуйста, как обработать исключение при вводе числа, вместо строки?(Там автоматически созданный кэтч блок, как вы можете заметить).
И вопрос про обработку исключения, когда ввели символ, вместо номера этажа. Я его написала, НО, если я ввожу символ, то меня уже просят ввести следующие данные, а неправильные данные с номером этажа остаются. Конечно, я могу просто осуществить выход из программы в этом кэтч блоке, а как осуществить так, чтобы у пользователя ,так скажем, был еще один шанс ввести номер этажа?Т.е. снова вернуться к try блоку ?
UPD:вроде бы со второй частью вопроса разобралась с помощью введения доп. переменной типа boolean. Но первый вопрос всё ещё остается открытым.
Scanner scanner = new Scanner(System.in);
double number = 0,number2=0;
int number1=0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите название города");
String s="";
try {
s = reader.readLine();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
System.out.println ("Введите номер этажа ");
number1 = scanner.nextInt();
}
catch(InputMismatchException e){
System.out.println ("Вероятно, вы ввели недопустимый формат данных ");
scanner.next();
}
Ответы (1 шт):
Я бы лучше выносил такую логику в отдельный метод. Примерно так:
import java.util.Scanner;
import java.util.function.Function;
public class Main {
private final static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
String city = input("Введите название города : ", v -> v);
Integer numb = input("Введите номер этажа : ", Integer::valueOf);
System.out.println("Город : " + city);
System.out.println("Этаж : " + numb);
}
private static <T> T input(String message, Function<String, T> converter) {
while (true) {
try {
System.out.println(message);
return converter.apply(scanner.nextLine());
} catch (Exception e) {
System.out.println("Вероятно, вы ввели недопустимый формат данных ");
}
}
}
}