Не могу понять, как отловить 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();
    }
}
Другие вопросы по тегам