我写了以下代码。我以为当我使用数字小于6时,它会进入无限循环,因为 不会被 scanner.nextLine() 擦除。但是这段代码可以毫无问题地运行。这是为什么?
public static void main(String[] args){
Scanner scannner = new Scanner(System.in)
int num = 0
boolean isValid = false;
while(!isValid){
try{
System.out.print("please input number:")
inputedNum = scanner.nextInt()
if(inputedNum < 6){
throw new IllegalArgumentException("please input number more than 6")
}
isValid = true
}catch(IllegalArgumentException e){
System.out.print(e.getMessage())
}catch(Exception e){
System.out.print("please input number")
scanner.nextLine()
}
}
}
我认为这段代码会进入死循环,因为 不被 scanner.nextLine() 擦除 如果 inputedNum < 6
在这种情况下,
\n
字符不会影响 nextInt
。 nextInt
在查找输入中的下一个整数时会跳过 \n
。因此,它将成功扫描您输入的下一个整数。如果小于 6,isValid
将被设置为 true,并且没有无限循环。
这是因为默认情况下,
\n
包含在delimiter
的
Scanner
中。扫描器将与其定界符匹配的字符串视为它扫描的标记的“分隔符”。
System.out.println(scanner.delimiter());
// prints "\p{javaWhitespace}+", which would match "\n"
即使扫描仪扫描了
\n
字符并试图将其解释为int,它也会抛出一个InputMismatchException
,它会被你的第二个catch
捕获。然后,\n
角色无论如何都会被 nextLine
消耗掉。同样,这不会导致无限循环,尽管输出会有点不同。