Не могу понять, как отловить InputMismatchException
Итак, вот мой текущий код для отлова ошибки InputMismatchException
int weapon = 0
boolean selection = true;
while(selection) {
try {
System.out.println("Pick number 1, 2, or 3.");
weapon = scan.nextInt();
selection = false;
} catch(InputMismatchException e) {
System.out.println("Choose 1,2,3");
weapon = scan.nextInt();
}
}
Я пытаюсь убедиться, что введен int, а не что-нибудь еще. Класс сканера уже реализован, и "сканирование" будет действовать для меня.
Спасибо за любые усилия, чтобы помочь!
2 ответа
Решение
Попробуй это:
int weapon = 0;
do{
System.out.println("Pick number 1, 2, or 3.");
if(scan.hasNextInt()){
weapon = scan.nextInt();
break;
}else{
System.out.println("Enter an integer only");
scan.nextLine();
}
}while(true);
Это будет гарантировать, что это целое число, и будет продолжать спрашивать, пока не получит его.
Во-первых, у вас уже есть цикл, с помощью которого можно запрашивать и сканировать int
, Вам не нужно дублировать это поведение в вашем обработчике исключений. Однако вам нужно отменить несовпадающий токен со сканера, чтобы можно было сканировать новый.
В качестве вторичного вопроса, ваш selection
переменная представляется избыточной.
Похоже, это может сделать то, что вы после:
int weapon = 0
while(weapon < 1 || weapon > 3) {
try {
System.out.println("Pick number 1, 2, or 3.");
weapon = scan.nextInt();
} catch(InputMismatchException e) {
//discard the mismatching token
scan.next();
}
}