所以我必须通过扫描仪接收输入.我正在尝试让程序在输入非整数值时继续询问用户输入有效值.以下是我试图实现这一目标的方式.
System.out.println("Enter an integer"); Scanner input = new Scanner(System.in); int level=0; try{ level=input.nextInt(); }catch(InputMismatchException e){ System.out.println(e+". Enter a valid entry!"); level=input.nextInt(); }
问题是如果用户输入了一个字符,程序就不会让用户输入另一个整数.程序停止并在catch块中打印出print语句以及:
Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at Main.main(Main.java:20) (which is level=input.nextInt(); in the catch block)
我在这做错了什么?
第一个问题是Scanner抛出异常时会发生什么.Java文档说:
"当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它"
这就是为什么你对nextInt的第二次调用会抛出另一个异常 - 它试图重新读取相同的令牌.如果你想丢弃它,你可以打电话给下一个.
第二个问题是您的代码只允许用户重新输入一次值.如果他们第二次输入错误的东西你就不走运了.我建议像这样:
int level = 0; boolean gotLevel = false; while (!gotLevel) { try { level = input.nextInt(); gotLevel = true; } catch (InputMismatchException e) { System.out.println("Error. " + input.next() + " is not a valid integer:" + e); } }