Java扫描程序输入验证[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我试图从我的输入中只接受三个数字: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;
java validation input java.util.scanner
1个回答
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);

此外,当ScannerhasNextInt返回false时,您需要从扫描仪中取出无效输入,例如使用您忽略的nextLine。否则你会得到一个无限循环:

while (!scanner.hasNextInt()) {
    System.out.println("Invalid input!");
    scanner.nextLine(); // This input is ignored
}
© www.soinside.com 2019 - 2024. All rights reserved.