7

我正在帮助一位朋友解决 Java 问题。然而,我们遇到了一个障碍。我们使用 Java.Util.Scanner.nextInt() 从用户那里获取一个数字,不断询问用户是否提供了其他任何东西。唯一的问题是,我们无法弄清楚如何进行错误处理。

我们尝试过的:

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

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

有什么帮助吗?

4

2 回答 2

16

您可以使用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 + ")");

也可以看看:


您的代码的问题,除了不必要的冗长错误处理,因为您让nextInt()throw anInputMismatchException而不是检查 for hasNextInt(),是当它确实抛出异常时,您不会推进Scanner有问题的输入!这就是为什么你得到一个无限循环!

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

于 2010-04-23T03:53:27.913 回答
2

如果数字是 non-int 会弹出异常,如果不是 reloop 会变成 1 并且循环会退出

  int reloop = 0;
  do {
   try {
        number = nextInt();
        reloop ++; 
  } catch (Exception e) {
       System.out.println ("Please enter a number!");
  }}
 while(reloop == 0);
于 2013-07-23T09:15:30.087 回答