Scanner scanner = new Scanner();
int number = 1;
do
{
try
{
option = scanner.nextInt();
}
catch (InputMismatchException exception)
{
System.out.println("Integers only, please.");
}
}
while (number != 0);
Run Code Online (Sandbox Code Playgroud)
尽管存在异常处理,但在给出非整数输入时,此代码将进入无限循环.它不是Scanner暂停在下一次迭代中收集输入,而是继续抛出InputMismatchExceptions直到程序被杀死.
扫描整数(或其他类型,我猜)输入,丢弃无效输入并正常继续循环的最佳方法是什么?
我显然正面临无限循环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()不会将指针移动到下一行,因此扫描仪不会超过任何输入.正如在这个问题的答案以及这里所解释的那样.