Java.util.scanner错误处理

时间:2010-04-23 03:40:24

标签: 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);

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

任何帮助?

2 个答案:

答案 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);