【问题标题】:Catch invalid input and return to input prompt JAVA捕获无效输入并返回输入提示JAVA
【发布时间】:2019-02-25 02:24:47
【问题描述】:

我对 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);
}

【问题讨论】:

    标签: java


    【解决方案1】:

    您可以使用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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-13
      • 2014-07-12
      • 2016-01-23
      • 2019-04-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多