Я пытаюсь понять, почему моя программа пропускает пользовательский ввод, поэтому я могу придумать решение. Если я намеренно даю ему плохую информацию и вызываю выброс InputMismatchException, он пропускает строку inputDouble = in.nextDouble();
. Вот что вывод выглядит следующим образом:Почему моя программа пропускает nextDouble() после исключения?
Please enter floating point value or -1 to stop
15.7
Please enter floating point value or -1 to stop
15.7
Please enter floating point value or -1 to stop
r
Number format is incorrect please try again
Please enter floating point value or -1 to stop
Number format is incorrect please try again
Total is: 31.4
И вот мой код
import java.util.InputMismatchException;
import java.util.Scanner;
public class AddingNumbers {
public static void main(final String[] args) {
Scanner in = new Scanner(System.in);
double inputDouble = 0;
double total = 0;
int tries = 0;
boolean done = false;
while (!done) {
if (tries < 2) {
try {
System.out.println("Please enter floating point value or -1 to stop");
inputDouble = in.nextDouble();
if (inputDouble != -1) {
total = total + inputDouble;
} else {
System.out.println("Total is: " + total);
done = true;
}
} catch (InputMismatchException exception) {
System.out.println("Number format is incorrect please try again");
tries++;
}
} else {
System.out.println("Total is: " + total);
done = true;
}
}
in.close();
}
}
Какая среда? Является ли это внутри IDE, например NetBeans или Eclipse? Некоторые IDE имеют нечетные проблемы с буферизацией, которые делают его похожим на то, что ваша программа читает строку позади. Пожалуйста, сообщите нам * точно *, где и как вы делаете ввод ввода. – markspace
Жаль, что это Затмение. Изменение его на inputFloat = новый сканер (System.in) .nextFloat(); исправлено это, однако теперь у меня есть ошибка для утечки ресурсов. Есть ли другой способ закрыть его, кроме in.close()? –
Я отредактировал свой ответ, чтобы добавить дополнительную информацию. Если это помогло решить вашу проблему, попробуйте выбрать ее в качестве ответа. – Alexander