如何创建检查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()
?不确定哪一个更通用…)是真的。 如果是,那么您可以区分“用户输入双倍”和“用户输入非数字类型”的情况
如果你必须检测三种情况,你需要有三组逻辑。
- 检查输入的字符是否是有效的数值。
- 检查输入的数字是否为整数。
- 检查输入的数字是否介于低限和高限之间。
你几乎必须按顺序检查它们。
扫描仪方便地使用hasXXX
方法来查看要读取的字符是否与给定模式匹配。