nextInt 规范(Java)

问题描述 投票:0回答:1

我写了以下代码。我以为当我使用数字小于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

java java.util.scanner
1个回答
0
投票

在这种情况下,

\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
消耗掉。同样,这不会导致无限循环,尽管输出会有点不同。

© www.soinside.com 2019 - 2024. All rights reserved.