Abd*_*ari 2 java infinite-loop java.util.scanner java-io
我显然正面临无限循环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);
Run Code Online (Sandbox Code Playgroud)
一些相关的问题解释了为什么如果输入流是System.in,它总是返回true ,但是我正在扫描File.
请让我知道我哪里出错了.
我正在尝试计算唯一整数值的总和(空格分隔的位置).
编辑:
经验教训,
input.hasNext()不会将指针移动到下一行,因此扫描仪不会超过任何输入.正如在这个问题的答案以及这里所解释的那样.
好吧,根据
while(input.hasNext()) {
if(input.hasNextInt()) {
sum += input.nextInt();
}
}
Run Code Online (Sandbox Code Playgroud)
如果此令牌不是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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,有很多解决方案,例如:
Scanner::next()