Мне интересно, как я могу остановить сканер от чтения лишнего ошибочного ввода от пользователя.Предотвращение сканера от чтения остаточного ввода в Java
Например, я хотел бы прочитать в поле ввода 2 one
как 2
в переменную diam
, которую выполняет программа ниже.
Проблема заключается в том, что следующий цикл автоматически обнаруживаетслева от входа и соответственно выполняет инструкцию if
.
Мне удалось обойти это, создав два сканера, но, к сожалению, это недопустимо для данного задания. Кроме того, в нашей программе мы должны использовать .hasNextInt()
.
Как предотвратить этот «перелив», используя только один сканер? Я должен предположить, что этот вопрос был поставлен раньше, но мне не повезло найти ответ.
Scanner scnr = new Scanner(System.in);
System.out.print("Enter the diameter of a "
+ "cylinder (in centimeters): ");
// BEGIN: diameter input verification loop
for (;;) {
if (!scnr.hasNextInt()) {
System.out.print("Please enter an integer value "
+ "(less than 2,147,483,648) as decimal digits: ");
scnr.nextLine();
continue;
}
diam = scnr.nextInt();
if (diam >= 0) {
//null statement
}
else {
System.out.print("Please enter a positive integer value: ");
continue;
}
break;
}
//END: diameter input verification loop
//prompts user for container height
System.out.print("Enter the height of a "
+ "cylinder (in centimeters): ");
// BEGIN: height input verification loop
for (;;) {
if (!scnr.hasNextInt()) {
System.out.print("Please enter an integer value "
+ "(less than 2,147,483,648) as decimal digits: ");
scnr.nextLine();
continue;
}
height = scnr.nextInt();
if (height >= 0) {
//null statement
}
else {
System.out.print("Please enter a positive integer value: ");
continue;
}
break;
}
//END: height input verification loop`
Благодарим вас за помощь, это похоже на простой способ сделать это. Хотя я забыл упомянуть, что назначение требует использования «.hasNextInt», и я считаю, что мы хотим придерживаться основных циклов, которые мы узнали до сих пор. Хотя, я не знаю, будет ли программа оценки отмечать ошибочность «try» и «catch». Мои извинения, я отредактирую свой вопрос. – FofX
@FofX Если вы используете 'nextInt()', вы по определению читаете только один токен. Ваша проблема заключается в том, что вы хотите обработать сценарий, в который пользователь ввел в качестве входных токенов _multiple_. –