在阅读hasNextInt()API之后,我仍然对这段代码不知所措。

Scanner input = new Scanner(System.in);
while (input.hasNextInt()) {
    input.next();
}


为什么即使输入什么也没有,循环还是开始。此外,hasNextInt()API提到


  扫描仪不会越过任何输入。


这意味着什么?那和它有什么关系吗?

最佳答案

Scanner input = new Scanner(System.in)不是阻止呼叫,它只是使用STDIN作为输入创建一个新的扫描仪。因此执行前进到while循环。

Oracle - Scanner (Java Platform SE 7)的API文档中


  如果此扫描程序的输入中包含另一个令牌,则返回true。等待输入扫描时,此方法可能会阻塞。扫描仪不会越过任何输入。


扫描程序将等待(此时input.hasNextInt()实际上是一个阻止呼叫)用户输入内容并按Enter。

然后在input.next()调用上,它实际上读取输入(使用它)并前进读取位置。

但是,如果在终端或控制台中输入类似12 hello之类的内容,这将导致while循环循环一次,然后退出。原因是hasNextInt()读取直到第一个空格,然后检查直到该空格的字符是否为有效的int。在这种情况下,它们是hasNextInt()返回true。然后,在循环的第二次迭代中,它遇到一个String,因此hasNextInt()返回false,这导致循环结束。

09-04 11:46