Scanner input = new Scanner(System.in);
while(input.hasNext())
{
System.out.println(input.nextInt());
System.out.println("To go on,Enter any number");
}
hasNext()
语句在这里如何运行?谁能详细解释一下?
hasNext()告诉您是否要从流中读取更多元素。在这种情况下,呼叫将被阻塞,直到有用户输入为止。
有三种情况:
用户完全不提供任何输入。通话将无限期阻止。
用户提供的输入不是EOF。返回值将是正确。
用户输入EOF。返回值将为false。
在程序的上下文中,这意味着将执行while循环,直到用户提供EOF(Ctrl + D或Ctrl + Z)为止。如果用户意识到这一点,我想会没事的。
但是绝对可以使该行为对用户更友好:例如,当前它要求用户输入数字。但是hasNext()不在乎输入是否为数字,只要输入不是EOF,循环将永远继续。]
如果用户尝试通过命令行提供一些预定义的输入,如果输入未使用EOF专门终止,则程序将永远阻塞,这将引起另一个问题。该语句确实not
表示没有更多输入要读取时,程序将退出(当然,除非EOF指定)。基于JavaDoc,hasNext()
:
根据文档的[Scanner
类实现一个Iterator<String>
]类>
请参见here
扫描仪将扫描您收到的整个用户输入。因此,基本上正确的编码标准着重于如何处理意外情况。因此hasNext()方法基本上检查当前位置之后的空格或换行,并检查此位置之后的二进制值。如果存在,则返回true,否则返回false。