java - 关于try-catch

标签 java exception if-statement try-catch throw

我目前正在学习 Java 的入门类(class),这是关于 try-catch 方法的。当我输入这个时,我的 System.out.println 语句不断重复。这是我的代码:

public static double exp(double b, int c) {
    if (c == 0) {
        return 1;
    }

    // c > 0
    if (c % 2 == 0) {
        return exp(b*b, c / 2);
    }
    if (c<0){
        try{
        throw new ArithmeticException();
        }
        catch (ArithmeticException e) {
            System.out.println("yadonegoofed");
        }
    }

    // c is odd and > 0
    return b * exp(b, c-1);
}

最佳答案

if (c<0){
    try{
    throw new ArithmeticException();
    }
    catch (ArithmeticException e) {
        System.out.println("yadonegoofed");
    }
}

// c is odd and > 0
return b * exp(b, c-1);

您的评论 c 很奇怪并且 > 0 是不正确的——您实际上从未终止异常函数。你扔了,你马上接住了,然后继续执行递归函数。最终,当你点击 wraparound 时,它又会是一个正数,错误就不会发生了。 (还有大约 20 亿次迭代——别等了。)

我不会在这里使用异常——您只需要终止递归。我会在 检查 0 之前检查负输入,并在那里抛出异常,然后在调用者中捕获异常

在伪代码中:

exp(double b, int c) {
    if (c < 0)
        throw new Exception("C cannot be negative");
    } else if (c % 2 == 0) {
        return exp(b*b, c / 2);
    } else {
        /* and so forth */
    }
}

关于java - 关于try-catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10133905/

相关文章:

java - 将用户输入数组传递给方法并返回一个整数?

python - Python异常语法错误

c# - 抛出异常时捕获所有线程的堆栈跟踪

Java - 创建和移动 xml : cannot access the file because it is being used by another process

java - 我需要 Tomcat 上的 JAX-WS 运行时。可以把 "jax-ws/lib/*"放到 "tomcat/lib"吗?

java - 将 Java 编写的应用程序分发给多个用户时,如何引用每个用户唯一的公共(public)目录?

c++ - 如何在 STL 容器中使用 'push_back' 大尺寸对象?

jQuery - 单击时隐藏和显示元素

java - 如何避免很多 if else 条件

javascript - li jquery 点击: if to switch