当前位置: 首页 > 面试题库 >

Scanner.hasNext上的无限循环,从文件读取

范翰海
2023-03-14
问题内容

我显然面临着一个无限循环while(input.hasNext()),如以下代码所示

File file = new File("data.txt");
Scanner input = new Scanner(file);

int sum = 0;

while (input.hasNext()) {
    if (input.hasNextInt()) {
        sum += input.nextInt();
    }
}
System.out.println(sum);

一些相关问题解释了为什么如果输入流为true总是返回true System.in,但是我正在扫描一个File

请让我知道我要去哪里了。

我正在尝试计算唯一整数值​​的总和(它们出现的位置用空格分隔)。

编辑:

获得的经验教训
input.hasNext()不会将指针移到下一行,因此扫描仪不会越过任何输入。正如在此问题的答案中以及此处所解释的。


问题答案:

好吧,据

while(input.hasNext()) {
  if(input.hasNextInt()) {
    sum += input.nextInt();
  }
}

如果此令牌不是int,扫描仪将不会使用下一个令牌。

int k=0;
while(input.hasNext()) {
  if(input.hasNextInt()) {
    sum += input.nextInt();
  } else {
    System.err.println("What ? It's not an integer...");
    if ( k < 1 ) {
      System.err.println("I'm gonna try again !");
      k++;
    } else {
      System.err.println("'"+input.next()+"' it's definitively not an integer");
      k=0;
    }
  }
}

最后,有很多解决方案,例如:

  • 修改您的输入文件,删除所有非整数令牌
  • 使用以下命令消费非整数令牌 Scanner::next()
  • 桑耶夫的答案


 类似资料:
  • 我正在为一个小项目尝试一些Java的套接字编程。我遇到了从外部进程读取无限InputStream的问题。程序进入无限循环。 我怀疑readLine()必须在EOF之前读取流。 我放了一些打印语句,我确信程序达到了while循环。 这是我的方法:

  • 首先,我不是程序员(只是对PHP有一些了解)。我制作了一个带有事件列表的网站,其中有一个选择字段,每月使用Ajax加载过滤事件。 该代码在大约3个月的时间里运行良好。但5天前,它突然停止工作,开始生成一个无限循环。 我调试了代码,发现问题出在“同时”循环上。我试图理解为什么这在一段时间内是完美的,然后它就不会了。(用无限循环崩溃服务器)。 这个函数只给出下个月的第一天。很好用。 这一个,为选择字段

  • 我有2个JTextFields: 对于如何实现该行为的任何帮助都非常感谢,因为我必须为至少10个其他文本字段执行此操作。 谢谢你!

  • 在连接上创建infinte循环!很奇怪,直到现在才发生。我不知道出了什么问题。我试图重建包,我复制一些代码从旧的源代码和相同的结果...

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 我是Java新手。我正在尝试遍历一个文件并将每个字符串写入ArrayList。为此,我有如下代码: 然而,由于某种原因,这段代码陷入了无限循环。即使我将打印语句作为当块的第一行,它也不会执行。 accountData.txt文件是这样排列的: 我已经读了很多遍,经常读到这是个问题,因为人们没有用Scanner.next()来移动指针,但我相信我正在这样做。我不知道哪里出了问题。 感谢您的帮助!