我正在尝试编写一个 Java 程序,要求用户在
while
循环中输入一个正整数。循环应继续,直到提供有效输入。
我尝试使用
try/catch
块来处理无效输入(例如字符串),但我仍然遇到问题。例如:
当用户输入字符串时,程序会抛出
InputMismatchException
并跳过重新提示用户。
我尝试添加
scanner.nextLine()
来清除输入缓冲区,但它没有按预期工作。
这是我到目前为止编写的代码:
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int userInput = -1;
while (userInput < 0) {
try {
System.out.print("Enter a positive number: ");
userInput = scanner.nextInt(); // Crashes if invalid input is entered
} catch (InputMismatchException e) {
System.out.println("Invalid input. Please enter a valid number.");
scanner.nextLine(); // Attempt to clear the buffer, but it doesn't work
}
}
System.out.println("You entered: " + userInput);
scanner.close();
}
}
问题:
当输入无效输入(如字符串)时,程序会跳过重新提示用户。
我怀疑我使用scanner.nextLine()清除输入缓冲区的方式存在问题。
我尝试过的:
将 Scanner.nextInt() 包装在 try/catch 块内以捕获异常。
捕获异常后使用scanner.nextLine()清除输入。
我的问题:
在这种情况下如何正确处理无效输入,以便程序不断重新提示用户,直到提供有效的正整数?
我相信无效输入满足了您的 while 条件。
也许尝试这样的事情:
String userInput = "";
while (true) { // loop until valid input
userInput = scanner.nextLine();
if (isInteger(userInput))
break;
System.out.print("Please enter a valid number.");
}
private static boolean isInteger(String str) {
try {
Integer.parseInt(str);
return true;
} catch(NumberFormatException e) {
return false;
}