根据hasNextInt()
的Java文档:
如果此扫描仪的输入中有另一行,则返回true。 此方法可能会在等待输入时阻止。扫描仪不会超过任何输入。
使用System.out.println("Enter something:");
while(!scn.hasNextInt()){
//do whatever..
}
时,可能会导致扫描仪等待用户输入。
例如:
Enter something:_ //(The underscore indicates the prompt waiting for user input)
输出:
hasNextInt()
我的问题是:.hasNextInt()
什么时候会等待输入?什么时候不会?是否在I / O缓冲区中没有要接收的令牌时,它会等待输入吗?
注意:我不是问如何使用hasNextInt()
实现正确的代码。我问什么时候会font-size:0px;
等待输入。
答案 0 :(得分:1)
首先,您应该注意hasNextInt()
实际上完成了两项任务。
int
。所以它尝试做的第一件事是根据Scanner的分隔符获得一个完整的令牌。它检查到目前为止在内存中收集的数据是否是一个完整的令牌 - 也就是说,我们已经命中了分隔符或流的末尾 - 如果是这样,它可以继续匹配并判断它是否为int。
假设到目前为止输入中有“12”。在你点击分隔符或流的末尾之前,你不知道它是否会是12,123,12.5,12A等。
现在,如果找不到分隔符,它会尝试从基础流中读取更多数据。当它这样做时,它可以阻止。该块可以是短时间(当底层流是文件时,它可能暂时阻塞,直到从磁盘中取出块),稍长(等待数据包从网络连接到达),或者非常长 - 在如果底层流是一个控制台。
来自控制台的输入流在用户按返回之前不会检索数据。因此,如果用户输入类似123 dog cat
的内容 - 但未按返回,则基础流不会从read()
返回,hasNextInt()
将阻止,直到用户按返回。
用户按下返回后,您实际上有三个令牌可用,因此当前hasNextInt()
将返回true
,然后您就可以读取该令牌并致电hasNextInt()
再次,它不会阻止,而是立即返回false
(有一个令牌,但它不是一个整数)。对于下一个,情况也是如此,然后它将再次阻止,因为用户需要输入另一行并再次按 Return 。
总结一下:
hasNextInt()
就会阻止。