我试图只接受输入中的三个数字: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;
答案 0 :(得分:2)
你的循环逻辑
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
的{{1}}返回hasNextInt
时,您需要从扫描程序中取出无效输入,例如使用您忽略的false
。否则你会得到一个无限循环:
nextLine