Проверка ввода с помощью Java

Я ноб, поэтому прошу прощения, если я задаю глупый вопрос. Я прошу пользователя ввести числовое значение. Если значение меньше 12 или не численное значение, такое как число, я хочу, чтобы он запрашивал их для другого ввода. Когда вводится значение не менее 12, я хочу, чтобы это значение присваивалось переменной с именем creditUnits;

Когда я запрашиваю начальное приглашение, моя программа поймает его, если введенное значение не является числовым, оно попросит пользователя ввести "Действительный номер:". Кажется, что цикл while работает хорошо.

У меня возникла проблема со вторым циклом, где предполагается, что любое число, введенное в нем, будет меньше 12. Оно попросит пользователя ввести значение больше 11. Проблема, с которой я сталкиваюсь, находится в этот момент, если пользователь вводит какое-либо значение в этот момент, программа просто сидит там. Любая помощь будет оценена, и я заранее извиняюсь за небрежность моего кода:

System.out.print("Enter the credits you will take each term: ");
while (!in.*************()){ System.out.print("Enter a valid number: "); in.next();
}
creditUnits = in.**********();
if (creditUnits < 12){ System.out.print("Enter a number greater than 11: "); in.next();
}
creditUnits = in.**********();
System.out.println("You will be taking " + creditUnits + " credits per term.");
2 ответа

Это потому, что вы просите сканер захватить следующие два входа, когда вам нужно только первое.

System.out.print("Enter the credits you will take each term: ");
while (!in.*************()){ System.out.print("Enter a valid number: "); in.next();
}
creditUnits = in.**********();
if (creditUnits < 12){ System.out.print("Enter a number greater than 11: "); creditUnits = in.**********();
}
System.out.println("You will be taking " + creditUnits + " credits per term.")

Кроме того, вы должны подумать о том, чтобы положить блок if(creditUnits < 12) в цикл while, так что вы можете постоянно проверять, ввели ли они число больше 12.

Что-то вроде:

System.out.print("Enter the credits you will take each term: ");
while (true){ System.out.print("Enter a valid number: "); creditUnits = in.**********(); if (creditUnits < 12){ System.out.print("\nNumber must be greater than 12!\n"); }else break;
}
System.out.println("You will be taking " + creditUnits + " credits per term.");

Кроме того, нет такого понятия, как глупый вопрос. Только глупые фанаты./Шутка


Как сказал Embattled Swag,

if (creditUnits < 12){ System.out.print("Enter a number greater than 11: "); in.next();
}

in.next() отбрасывает то, что вы вводите. Тогда сканер блокируется, если вы вводите пробелы только до тех пор, пока он не получит здесь ******:

creditUnits = in.**********();

Если вы введете что-либо еще в дополнение к пробелу (я предполагаю, что вы просто нажали кнопку ввода), тогда он распечатает часть "Вы будете принимать...", если это действительный двойной. В противном случае он выдает исключение InputMismatchException.

Вам, вероятно, лучше получить вход и применить ваши проверки на достоверность вручную, в отличие от цикла **********

public static void main(String[] args) throws IOException { System.out.print("Enter the credits you will take each term: "); Scanner in = new Scanner(System.in); String input = in.next(); ****** credits = 0.0; while (true) { try { credits = ******.parse******(input); if (credits < 12.0) { throw new IllegalArgumentException("Must take at least 12 credits."); } else { break; } } catch(IllegalArgumentException e) { System.out.print("Enter a number greater than 11: "); input = in.next(); } } System.out.println("You will be taking " + credits + " credits per term."); in.close();
}

licensed under cc by-sa 3.0 with attribution.