【问题标题】:Cannot Figure out how to catch InputMismatchException无法弄清楚如何捕获 InputMismatchException
【发布时间】:2015-04-23 00:21:29
【问题描述】:

这是我当前用于捕获 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 而不是其他任何内容。 Scanner 类已经实现,“scan”将为我充当它。

感谢您的帮助!

【问题讨论】:

  • 是的,我已经查看了许多关于同一件事的其他问题,但无法弄清楚。
  • 不清楚你的问题是什么。你期望这会做什么?更重要的是,它在做什么?提供运行的输出会有所帮助。

标签: java exception try-catch inputmismatchexception


【解决方案1】:

试试这个:

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

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

【讨论】:

    【解决方案2】:

    首先,您已经有了一个循环来提示和扫描所需的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();
        }
    }
    

    【讨论】:

    • 是的,我以前做过类似的事情,但没有成功。现在我看到了差异以及这种方式是如何起作用的。感谢您提供有关 while 循环的提示,将会有所帮助!
    猜你喜欢
    • 2014-12-18
    • 2020-11-14
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多