我正在尝试编写使用Scanner类来获取用户输入的代码。但hasNext(),hasNextInt()和hasNextLine()每次都会遇到无限循环。
public static void getInput(ArrayList<Double> arr){
Scanner input = new Scanner(System.in);
String data = "";
String init;
while(input.hasNextLine()){
init = input.nextLine();
data += init;
}
.
.
.
}
答案 0 :(得分:1)
当且仅当源关闭时,在hasNextLine()
对象上调用Scanner
将返回false。如果在close()
尝试从源读取字节或者已到达流末尾时发生InputStream
,则可以通过调用IOException
上的Scanner
来执行此操作(EOF
)。当到达最后并收到此标记时,InputStream
文件将被关闭,而System.in
的读取将会阻止,直到数据可用或引发异常。
在Unix上,EOF
标记通常由Ctrl-D
提供,而在Windows上,它通常为Ctrl-Z
。如果您使用的是IDE,您可能会发现它们不同;例如,我的Windows机器上的Intellij IDE使用Ctrl-D
,而Eclipse在过去遇到了问题。
答案 1 :(得分:1)
我知道这很老了。为了子孙后代,我也发布了自己的经验。我个人遇到扫描仪问题,并且hasNext()无限循环。当我的扫描仪基于System.in进行输入时,我已经在程序的前面调用了Scanner.close()。取下扫描仪上的封盖,现在实例化固定它的新扫描仪。就像评论中提到的那样,扫描仪被阻止等待输入,因此它始终始终为false。
指向对我有帮助的帖子的链接:How can I clear the Scanner buffer in Java?