我显然面临着一个无限循环while(input.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);
一些相关问题解释了为什么如果输入流为true总是返回true System.in,但是我正在扫描一个File。
System.in
File
请让我知道我要去哪里了。
我正在尝试计算唯一整数值的总和(它们出现的位置用空格分隔)。
编辑:
获得的经验教训 input.hasNext()不会将指针移到下一行,因此扫描仪不会越过任何输入。正如在此问题的答案中以及此处所解释的。
input.hasNext()
好吧,据
while(input.hasNext()) { if(input.hasNextInt()) { sum += input.nextInt(); } }
如果此令牌不是int,扫描仪将不会使用下一个令牌。
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()