Исключение выдается nextInt
, но у вас нет try
/ catch
вокруг вашего звонка на nextInt
, поэтому его не поймают. Переместите блок try
/ catch
так, чтобы внутри него находился вызов nextInt
. (Вы обрабатываете ошибку из division
nextDouble
, а не из nextInt
.)
Но : Вы могли бы рассмотреть возможность вызова hasNextInt
проактивно, а не реагировать на исключение реактивно. Оба подхода имеют свои плюсы и минусы.
Вот как вы будете использовать hasNextInt
с циклом:
System.out.println("Select operation (1 - 5): ");
while (!sc.hasNextInt()) {
sc.nextLine();
System.out.println("Please entire a number [1 - 5]:");
}
choice = sc.nextInt();
sc.nextLine();
switch (choice) {
// ...
или для проверки диапазона, например:
do {
System.out.println("Select operation (1-5): ");
choice = -1;
if (!sc.hasNextInt()) {
System.out.println("Please enter a number (1-5, inclusive)");
} else {
choice = sc.nextInt();
if (choice < 1 || choice > 5) {
System.out.println(choice + " isn't an option, please enter a number (1-5, inclusive");
}
}
sc.nextLine();
} while (choice < 1 || choice > 5);
switch (choice) {
// ...