我正在帮助一个有java问题的朋友。但是,我们遇到了障碍。我们使用Java.Util.Scanner.nextInt()从用户那里获取一个数字,不断询问用户是否提供了其他内容。唯一的问题是,我们无法弄清楚如何做错误的handeling。
我们尝试了什么:
do {
int reloop = 0;
try {
number = nextInt();
} catch (Exception e) {
System.out.println ("Please enter a number!");
reloop ++;
}
} while(reloop != 0);
唯一的问题是,如果输入不是数字的东西,这将无限循环。
任何帮助?
答案 0 :(得分:13)
如果您执行Scanner
,则可以使用hasNextInt()
验证nextInt()
是否会成功。如果你想跳过“垃圾”,你也可以打电话并放弃nextLine()
。
所以,像这样:
Scanner sc = new Scanner(System.in);
while (!sc.hasNextInt()) {
System.out.println("int, please!");
sc.nextLine();
}
int num = sc.nextInt();
System.out.println("Thank you! (" + num + ")");
代码的问题,除了因nextInt()
抛出InputMismatchException
而不是检查hasNextInt()
而导致的不必要的详细错误处理,是 抛出一个异常,你不会提前Scanner
超过有问题的输入!这就是你获得无限循环的原因!
您可以拨打并放弃nextLine()
来解决此问题,但如果您使用上面提到的无异常hasNextInt()
预检查技术,那就更好了。
答案 1 :(得分:1)
如果数字是非int,则会弹出异常,如果不是reloop将变为1,循环将退出
int reloop = 0;
do {
try {
number = nextInt();
reloop ++;
} catch (Exception e) {
System.out.println ("Please enter a number!");
}}
while(reloop == 0);