如何在 while 循环中正确使用 try/catch 块来处理 Java 中的无效输入?

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

我正在尝试编写一个 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();
    }
}

问题:

  1. 当输入无效输入(如字符串)时,程序会跳过重新提示用户。

  2. 我怀疑我使用scanner.nextLine()清除输入缓冲区的方式存在问题。

我尝试过的:

  1. 将 Scanner.nextInt() 包装在 try/catch 块内以捕获异常。

  2. 捕获异常后使用scanner.nextLine()清除输入。

我的问题:

在这种情况下如何正确处理无效输入,以便程序不断重新提示用户,直到提供有效的正整数?

java validation exception while-loop
1个回答
0
投票

我相信无效输入满足了您的 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;
  }
© www.soinside.com 2019 - 2024. All rights reserved.