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