Java.util.scannererror handling

我正在帮助一个有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); 

唯一的问题是,如果你输入的不是数字,这就会无限循环。

有帮助吗?

如果执行nextInt() ,则可以使用hasNextInt()来validationScanner是否成功。 如果你想跳过“垃圾”,你也可以调用并丢弃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 + ")"); 

也可以看看:

  • 如果输入错误的类型,如何防止扫描程序抛出exception? (Java)的

代码的问题,除了不必要的详细error handling,因为你让nextInt()抛出一个InputMismatchException而不是检查hasNextInt() ,就是当它抛出exception时,你不会使Scanner超越问题输入! 这就是你获得无限循环的原因!

您可以调用并丢弃nextLine()来解决此问题,但更好的方法是使用上面提到的无exception的hasNextInt()预检查技术。

如果数字是非int,则会弹出exception,如果不是reloop将变为1,循环将退出

  int reloop = 0; do { try { number = nextInt(); reloop ++; } catch (Exception e) { System.out.println ("Please enter a number!"); }} while(reloop == 0);