我很难理解这段代码中发生的事情。 如果我注释掉行:
s.nextLine();
进入无限循环打印:“请仅输入数字0到9” 。
我不明白的是,为什么它进入无限循环而不是再次等待整数输入?
private static int getInt() {
Scanner s = new Scanner(System.in);
System.out.println("Please enter an integer ");
while(true) {
try {
return s.nextInt();
} catch(InputMismatchException e) {
//s.nextLine();
System.out.println("Please enter a number using only the digits 0 to 9");
}
}
}
答案 0 :(得分:1)
如果您输入的是令牌,且没有错配,例如任何int
。现在,当您输入不匹配项时,它将进入catch块并在那里执行sysout。
之所以陷入无限循环是因为nextInt
并没有读取行尾来获取新的输入-因此,它与先前的输入是无限循环。
通过调用nextLine
,扫描程序会消耗整行,并准备进行下一次输入。
答案 1 :(得分:0)
您的while循环是无限循环的原因,因为条件始终为真。
它将继续尝试解析提供的输入,并且由于它从不执行s.nextInt()
,因此扫描程序不会继续前进,而是继续考虑相同的输入。
需要告知“扫描仪”对象转到下一个要扫描的物体,否则它将保持在原位。
s.nextLine();
使扫描仪越过先前的输入并准备好进行新的输入。
答案 2 :(得分:-1)
这里的问题是您正在使用“ return s.nextInt();”为此,输入必须是INTEGER 123456 ...否则,它将不断抛出该异常,因为随后无法解析value并将其转换为有效整数,从而导致无限循环。要进行验证,请尝试输入有效的整数而不是字母数字字符。