我显然面临着无限循环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);
一些相关的问题解释了为什么如果输入流是,它总是返回 trueSystem.in
,但是我正在扫描File
.
请让我知道我哪里出错了。
我正在尝试计算唯一整数值的总和(在它们出现的地方用空格分隔)。
Edit:
学过的知识,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()
- 桑吉夫的回答
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)