我想从用户那里获取整数输入。我正在使用try-catch异常,因此如果输入不是int
,它会要求用户输入另一个输入。我写了以下代码:
while (flag==true) {
try {
System.out.println("Enter the encryption key!");
k = input.nextInt();
flag = false;
}
catch (InputMismatchException ex) {
System.out.println("Please enter integer value!(");
}
}
但是当发生异常时,循环会继续打印
"Enter the encryption key!"
"Please enter integer value!"
无限,因为扫描仪输入不等待接收另一个输入。
我该如何解决这个问题?
答案 0 :(得分:1)
您应该在next
子句中调用catch
,这样可以解决问题。
请参阅docs - Scanner
:
当扫描仪抛出
InputMismatchException
时,扫描仪将不会 传递导致异常的令牌,以便可以检索它 或通过其他方法跳过。
如果next
子句中没有catch
,input.nextInt();
会继续阅读相同的令牌,添加next
会消耗该令牌。
答案 1 :(得分:1)
您可以尝试使用
input.nextLine()
因为它等到你按下回车键。但是如果我没记错的话,你需要将它解析为int。
答案 2 :(得分:1)
你应该向我提出Maroun Maroun
看起来更 clean 的建议。
另一种方法是重新初始化循环中的Scanner
。
boolean flag = false;
while (!flag) {
try {
input = new Scanner(System.in);//Initialize it here
//....