如何正确捕获异常

 君莫笑 发布于 2023-02-13 12:32

所以我必须通过扫描仪接收输入.我正在尝试让程序在输入非整数值时继续询问用户输入有效值.以下是我试图实现这一目标的方式.

    System.out.println("Enter an integer");
    Scanner input = new Scanner(System.in);
    int level=0;

    try{
        level=input.nextInt();
    }catch(InputMismatchException e){
        System.out.println(e+". Enter a valid entry!");
        level=input.nextInt();
    }

问题是如果用户输入了一个字符,程序就不会让用户输入另一个整数.程序停止并在catch块中打印出print语句以及:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Main.main(Main.java:20) (which is level=input.nextInt(); in the catch block)

我在这做错了什么?

1 个回答
  • 第一个问题是Scanner抛出异常时会发生什么.Java文档说:

    "当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它"

    这就是为什么你对nextInt的第二次调用会抛出另一个异常 - 它试图重新读取相同的令牌.如果你想丢弃它,你可以打电话给下一个.

    第二个问题是您的代码只允许用户重新输入一次值.如果他们第二次输入错误的东西你就不走运了.我建议像这样:

    int level = 0;
    boolean gotLevel = false;
    
    while (!gotLevel) {
      try {
        level = input.nextInt();
        gotLevel = true;
      } catch (InputMismatchException e) {
        System.out.println("Error. " + input.next() + " is not a valid integer:" + e);
      }
    }
    

    2023-02-13 12:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有