java - Java异常后重新提示

标签 java exception

我记得在 Python 中遇到过这个问题。这段 Java 代码是我计算三角形面积的 Python 代码的复制品。如果输入非数字值,我会捕获异常,但最终结果会出错。

private static float baseLength() {
    float baseLength = 0;
    Scanner user_input = new Scanner(System.in);
    try {
        while (baseLength <= 0) {
            System.out.print("Enter the base length of the triangle: ");
            baseLength = user_input.nextFloat();
            if (baseLength <=0) {
                System.out.println("Error. Plase enter a number higher than 0.");
            }
        }            
    } catch (InputMismatchException badChar) {   
        System.err.println("You have entered a bad value. Please try again");
        baseLength();
    }
    return baseLength;

它将从错误的数字中恢复,但不能从非数字的值中恢复。我仍然无法弄清楚确切的问题是什么。

最佳答案

您可以在 try/catch block 周围放置 while 循环来实现此目的:

private static float baseLength() {
    float baseLength = 0;
    Scanner user_input = new Scanner(System.in);
    while (baseLength <= 0) {
        try {
            System.out.print("Enter the base length of the triangle: ");
            baseLength = user_input.nextFloat();
            if (baseLength <= 0) {
                System.out.println("Error. Plase enter a number higher than 0.");
            }
        } catch (InputMismatchException badChar) {
            System.err.println("You have entered a bad value. Please try again");
        }
    }
    return baseLength;
}

关于java - Java异常后重新提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34059407/

相关文章:

java - 来自远程客户端的 websphere jms 队列访问

java - 在 Java 中编写带有清理操作的 catch block

java - 为什么这些重新抛出的异常中的任何一个都会产生编译器错误?

java - CCC 2018 J4 : NoSuchElementException Error (Java)

c++ - 在展开过程中抛出——为什么这个例子有效?

java - web3J 与 infura 的兼容性

java - 如何将 arraylist 与数组一起使用?

java - 如何在 java 中的 .txt 文件中写入或存储字符串数组

java - 如何在首选项中更改 ListView 中的焦点颜色?

vb.net - 函数调用自身,无法避免 StackOverflow 错误