Java.util.scanner错误处理

Hus*_*ain 6 java java.util.scanner

我正在帮助一个有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);
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,如果您输入的不是数字,这将无限循环.

有帮助吗?

pol*_*nts 13

如果您这样做hasNextInt(),您可以用来验证是否Scanner会成功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 + ")");
Run Code Online (Sandbox Code Playgroud)

也可以看看:


代码的问题,除了不必要的详细错误处理,因为你nextInt()抛出InputMismatchException而不是检查hasNextInt(),是当它确实抛出异常时,你不会推进Scanner过去有问题的输入!这就是你获得无限循环的原因!

您可以调用并丢弃nextLine()以解决此问题,但更好的是,如果您使用hasNextInt()上面提到的无异常预检查技术.