Java.util.scanner错误处理

Java.util.scanner错误处理,java,java.util.scanner,Java,Java.util.scanner,我正在帮助一位朋友解决一个java问题。然而,我们遇到了一个障碍。我们使用Java.Util.Scanner.nextInt()从用户那里获取一个数字,不断询问用户是否提供了其他信息。唯一的问题是,我们不知道如何处理错误 我们尝试的是: do { int reloop = 0; try { number = nextInt(); } catch (Exception e) { System.out.println ("Please enter a number!")

我正在帮助一位朋友解决一个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);
唯一的问题是,若你们输入的不是数字,那个么这个循环是不确定的

有什么帮助吗?

如果执行
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()!这就是为什么你会得到一个无限循环


您可以调用并放弃
nextLine()
来修复此问题,但更好的方法是使用上面介绍的无异常
hasNextInt()
预检查技术。

如果数字为非int,异常将弹出,如果不是,重新启动将变为1,循环将退出

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

我会使用
布尔值
而不是int。如果下一个标记不是
int