小编典典

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

java

我显然面临着一个无限循环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()不会将指针移到下一行,因此扫描仪不会越过任何输入。正如在此问题的答案中以及此处所解释的。


阅读 298

收藏
2020-11-26

共1个答案

小编典典

好吧,据

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()
  • 桑耶夫的答案
2020-11-26