扫描仪课程'无限循环上的hasNext()

时间:2018-01-23 23:17:46

标签: java input java.util.scanner

我正在尝试编写使用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;
       }
       .
       .
       .
   }

2 个答案:

答案 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?