Java除以零不会带来算术异常 - 为什么?

2022-08-31 17:05:43

为什么此代码不抛出 ?看一看:ArithmeticException

public class NewClass {

    public static void main(String[] args) {
        // TODO code application logic here
        double tab[] = {1.2, 3.4, 0.0, 5.6};

        try {
            for (int i = 0; i < tab.length; i++) {
                tab[i] = 1.0 / tab[i];
            }
        } catch (ArithmeticException ae) {
            System.out.println("ArithmeticException occured!");
        }
    }
}

我不知道!


答案 1

IEEE 754 定义为无穷大、无穷大和 NaN。1.0 / 0.0-1.0 / 0.00.0 / 0.0

顺便说一句,浮点值也有,所以是 。-0.01.0/ -0.0-Infinity

整数算术没有任何这些值,而是抛出异常。

要检查所有可能产生非有限数的可能值(例如NaN,0.0,-0.0),您可以执行以下操作。

if (Math.abs(tab[i] = 1 / tab[i]) < Double.POSITIVE_INFINITY)
   throw new ArithmeticException("Not finite");

答案 2

为什么你不能自己检查一下,如果这是你想要的,就抛出一个例外。

    try {
        for (int i = 0; i < tab.length; i++) {
            tab[i] = 1.0 / tab[i];

            if (tab[i] == Double.POSITIVE_INFINITY ||
                    tab[i] == Double.NEGATIVE_INFINITY)
                throw new ArithmeticException();
        }
    } catch (ArithmeticException ae) {
        System.out.println("ArithmeticException occured!");
    }

推荐