当前位置: 首页 > 知识库问答 >
问题:

扫描仪类的hasNext()无限循环

鲜于高明
2023-03-14

我正在尝试编写使用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个答案

许华清
2023-03-14

我知道这很旧。为了子孙后代,我也在发布我的经历。我个人对scanner和hasNext()无限循环有问题。我给扫描器打过电话。close()在程序的前面,当我的扫描仪基于系统时。请输入。移除扫描器上的关闭,而不是实例化新的扫描器。正如一条评论所提到的,扫描仪在等待输入时被阻止,所以它总是读取false。

链接到帮助我的帖子:如何在Java中清除扫描仪缓冲区?

朱刚捷
2023-03-14

当且仅当源关闭时,在扫描仪对象上调用hasNextLine()将返回false。如果扫描器试图从源读取字节时发生IOException,或者如果到达流的末尾(EOF),则可以通过调用InputStream上的close()来实现。而当您到达末尾并从系统读取该标记时,文件的InputStream将被关闭。在中,将阻止,直到数据可用或引发异常。

在Unix上,EOF标记通常由Ctrl-D提供,而在Windows上通常是Ctrl-Z。如果您使用的是IDE,您可能会发现这些不同;例如,我的Windows机器上的Intellij IDE使用Ctrl-D,Eclipse过去曾出现过问题。

 类似资料:
  • 问题内容: boolean z = false; do { try { a = sc.nextInt(); z = true; } catch(Exception e) { } } while(!z); 试试这个。如果您第一次尝试整数,则整数将正确执行。但是,如果您输入错误的文本类型,即使您接下来输入int并跳过将布尔值分配为true的情况,也会变成无限循环。为什么是这样? 问题答案: 您的问题出

  • 正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。

  • 我应该写一个程序,处理用户输入并将其翻译成Pig Latin并打印出来。我的翻译指南是: Pig Latin是英语,每个单词的开头辅音都移到末尾,后跟“ay”。以元音开头的单词只需附加“ay”即可。例如,在Pig Latin中,短语“蘑菇蓝的最深阴影”会出现如下:e-Thay eepest day ade shay of ay-ushroom may ue blay 所以我写了这个程序: 它不起作

  • 问题内容: 我正在用Java写一个简单的程序,它需要从文本文件中读取数据。但是,我在计算行数时遇到了麻烦。对于一个简单的Google搜索来说,这个问题似乎已经足够普遍了,但是我什至没有在搜索正确的东西。 我正在学习的教科书建议要计算文本文件中的行数,您应该执行以下操作: 在我看来,这是问题所在。我认为无限运行。我在代码中使用的数据文件肯定具有有限数量的数据行。 我该怎么办? 问题答案: 第一次调用

  • 嗨,我正在编写一个程序,它使用Scanner从用户那里获取输入,然后使用布尔方法检查输入的长度是否不超过六个字符。问题是,如果长度小于六个,我使用了while循环来不断请求输入;但是在第一次错误输入后,如果你插入一串六个字母或更长的字符串,循环仍然会继续。这是程序: 谢谢

  • 我写了这个正则表达式