1

我试图绕过异常,我遇到的问题是我需要创建一个程序,要求用户输入数字 9-99。这个数字必须使用 3 个不同的异常进行错误检查。

e1:数字超出范围(200)

e2:数字是整数以外的数据类型(双精度)

e3:输入是数字(char)以外的另一种数据类型

我试图在我的 if 结构中创建模式以使所有三个工作,但是我无法区分 e2 和 e3。它将始终默认为 e2。这是我只有两个例外的情况,但我非常感谢帮助我弄清楚如何实施第三个。谢谢你。

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    boolean tryAgain = true;
  do {
       try {
            System.out.println("Please enter an integer between 9 and 99: ");

            int inInt = input.nextInt();

            if (inInt >= 9 && inInt <= 99){
                System.out.println("Thank you.  Initialization completed.");
                tryAgain = false;
            }
            else if (inInt < 9 || inInt > 99){
                throw new NumberFormatException("Integer is out of range.");
            }
        }
        catch (NumberFormatException e1) { // Range check
            System.out.println("* The number you entered is not between 9 and 99.  Try again.");
            System.out.println();
            input.nextLine();
        }
       catch (InputMismatchException e2) { // Something other than a number
            System.out.println("* You did not enter an integer.  Try again.");
            System.out.println();
            input.nextLine();
        }
    } while(tryAgain);
}

}

这是我现在得到的输出:

请输入 9 到 99 之间的整数:2

  • 您输入的数字不在 9 到 99 之间。请重试。

请输入 9 到 99 之间的整数:f

  • 您没有输入整数。再试一次。

请输入 9 到 99 之间的整数:88

谢谢你。初始化完成。

https://www.ideone.com/ZiOpGH

4

2 回答 2

1

如果你必须检测三种情况,你需要有三组逻辑。

  1. 检查输入的字符是否为有效数值。
  2. 检查输入的数字是否为整数。
  3. 检查输入的数字是否在下限和上限之间。

而且您几乎必须按顺序检查它们。

Scanner 可以方便hasXXX地查看要读取的字符是否与给定模式匹配。

于 2013-03-18T02:21:04.837 回答
1

catch (InputMismatchException e2)中,测试以查看input.hasNextDouble()(或input.hasNextFloat()?不确定哪个更通用...)是否正确。如果是,那么您可以区分“用户输入双精度”和“用户输入非数字类型”的情况

于 2013-03-18T01:28:09.820 回答