这个问题在这里已有答案:
我试图从我的输入中只接受三个数字:1,2,3。除此之外的任何其他数字必须无效。我创建了方法,但我不知道为什么它不起作用。我该改变什么?
int number;
do {
System.out.println("Enter 1, 2 or 3");
while (!scanner.hasNextInt()) {
System.out.println("Invalid input!");
}
number = scanner.nextInt();
} while (number == 1 || number == 2 || number == 3)
return number;
你的循环逻辑
do {
...
} while (number == 1 || number == 2 || number == 3);
只要答案有效,就要求留在循环中。你想要改变你的状况:
do {
...
} while (!(number == 1 || number == 2 || number == 3));
或使用De Morgan's Law反转单个组件:
do {
...
} while (number != 1 && number != 2 && number != 3);
此外,当Scanner
的hasNextInt
返回false
时,您需要从扫描仪中取出无效输入,例如使用您忽略的nextLine
。否则你会得到一个无限循环:
while (!scanner.hasNextInt()) {
System.out.println("Invalid input!");
scanner.nextLine(); // This input is ignored
}