0

所以这是我当前用于捕获 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 而不是其他任何内容。已经实现的扫描器类和“扫描”将为我充当它。

感谢您的帮助!

4

2 回答 2

0

尝试这个:

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);

这将确保它是一个整数,并且它会一直询问直到它得到它。

于 2015-04-23T00:29:07.987 回答
0

首先,您已经有一个循环来提示和扫描所需的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();
    }
}
于 2015-04-23T00:32:51.643 回答