[英]Infinite loop on Scanner.hasNext, reading from a file
我显然在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,但是我正在扫描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()
使用非整数标记 您无需对内容进行双重检查。 这应该工作:
File file = new File("data.txt");
Scanner input = new Scanner(file);
int sum = 0;
while(input.hasNextInt()) {
sum += input.nextInt();
}
System.out.println(sum);
希望这可以帮助。
看起来像扫描程序正在读取文件中的非int值,当它发生时,(input.hasNext())将始终为true,因为有一些东西作为扫描程序的输入,但它不是int。 因此,扫描程序会在内部if(input.hasNextInt())检查中跳过读取此非int值。
因此扫描程序不会超出此元素并始终返回true。
如果要总结文件中的所有整数,则应将代码修改为:
while(input.hasNext()) {
if(input.hasNextInt()) {
sum += input.nextInt();
}
else
input.next();
}
只需在扫描仪遇到它时读取非整数元素。 希望这澄清一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.