如何创建检查int范围,数字类型而不是char的exception?

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

e1:数字超出范围(200)

e2:number是整数以外的数据类型(double)

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

我试图在我的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  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

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

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

  1. 检查输入的字符是否是有效的数值。
  2. 检查输入的数字是否为整数。
  3. 检查输入的数字是否介于低限和高限之间。

你几乎必须按顺序检查它们。

扫描仪方便地使用hasXXX方法来查看要读取的字符是否与给定模式匹配。