当前位置: 代码迷 >> java >> 捕获无效输入并返回输入提示JAVA
  详细解决方案

捕获无效输入并返回输入提示JAVA

热度:56   发布时间:2023-07-17 20:46:50.0

我对Java非常陌生,作为大学课程的一部分,我必须编写一个执行一些基本功能的程序。 该程序的一部分是它需要计算用户输入的数字的阶乘。 如果用户输入一个负数,那么它必须提示输入一个正数。 我有做到这一点。

但是,如果用户输入小数,例如2.2,则程序应向用户显示错误并提示输入有效数据。 我相信应该实施某种排序或尝试捕获,但是到目前为止,在花了很多时间之后,我仍然无法成功地使它起作用。 有什么想法如何使程序捕获InputMismatchException错误并提示用户再次输入?

程序中的相关代码块如下...

public static void factorialNumber() {
    int factorial = 1;
    boolean valid;
    int number = 0;

    do {
        System.out.println("Please enter a number: ");
        number = sc.nextInt();
        valid = number > 0;
        if (!valid) {
            System.out.println("ERROR Please enter a positive number");
        }
    } while (!valid);

    if (number < 0) {
        System.out.println("***Error***: Please enter a positive number ... ");
        factorialNumber();
    }

    if (number > 0) {
        System.out.print("The factorial is: " + number + " ");
    }

    for (int i = 1; i <= number; i++) {
        factorial *= i;
        if ((number - i) > 0) {
            System.out.print("x " + (number - i) + " ");
        }
    }

    System.out.println("= " + factorial);
}

您可以使用Double类解析用户输入,然后仅获取正确的值。 像这样:

public static void factorialNumber() {
    int factorial = 1;
    boolean valid;
    int number = 0;
    String userInput;

    do {
        System.out.println("Please enter a number: ");
        userInput = sc.nextLine();
        valid = validateUserInput(userInput);
    } while (!valid);

    number = Double.valueOf(userInput).intValue();
    System.out.print("The factorial is: " + number + " ");

    for (int i = 1; i <= number; i++) {
        factorial *= i;
        if ((number - i) > 0) {
            System.out.print("x " + (number - i) + " ");
        }
    }

    System.out.println("= " + factorial);
}

private static boolean validateUserInput(String userInput) {
    if (userInput == null) {
        System.out.println("You should enter a number!");
        return false;
    }

    Double userInputNumber;
    try {
        userInputNumber = Double.valueOf(userInput);
    } catch (Exception e) {
        System.out.println("Please enter a valid number value.");
        return false;
    }

    if (userInputNumber <= 0) {
        System.out.println("ERROR Please enter a positive number");
        return false;
    } else if (userInputNumber - userInputNumber.intValue() > 0) {
        System.out.println("ERROR You entered a fractional number!");
        return false;
    }

    return true;
}
  相关解决方案