编程语言
首页 > 编程语言> > java-Scanner.hasNext上的无限循环,从文件中读取

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

作者:互联网

我显然在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);

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

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

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

编辑:

学过的知识,
 input.hasNext()不会将指针移到下一行,因此扫描器不会前进到任何输入之外.如对这个问题的答案以及here所述.

解决方法:

好吧,据

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-util-scanner,java,infinite-loop,java-io
来源: https://codeday.me/bug/20191011/1891752.html