try-catch for division by zero

2019-01-19 11:15发布

My question is about try-catch blocks on a simple division by zero example. You see the first line of try? If I cast any of those two variables to the double the program does not recognize the catch block. In my opinion, whether I cast or not only the catch block must be executed. What is wrong on this code?

public static void main(String[] args) {

    int pay=8,payda=0;  

    try {

        double result=pay/(double)payda; // if I cast any of the two variables, program does not recognize the catch block, why is it so?
        System.out.println(result);
        System.out.println("inside-try");

    } catch (Exception e) {

        System.out.println("division by zero exception");
        System.out.println("inside-catch");

    }
}

7条回答
forever°为你锁心
2楼-- · 2019-01-19 11:53

No one should try to expect RuntimeException to be thrown from their code. These Exceptions can be (and should be) avoided easily.

查看更多
狗以群分
3楼-- · 2019-01-19 11:55

I'd suggest verifying:

if (divisor != 0) {
    // calculate
}

rather than catching an exception

查看更多
叛逆
4楼-- · 2019-01-19 12:01

Because dividing two doubles returns a Infinity, but doesn't throw. You can use isInfinite() to check for this. However, the appropriate solution (as already noted) is to check the denominator before the division.

查看更多
我命由我不由天
5楼-- · 2019-01-19 12:03

Divide by zero is valid for floating point numbers.

  • 1/0 yields Infinity.
  • (-1)/0 yields -Infinity.
  • 0/0 yields NaN.

These "numbers" are properly defined in IEEE 754.

Integer division by zero, on the other hand, throws because one cannot represent infinity as an int.

查看更多
霸刀☆藐视天下
6楼-- · 2019-01-19 12:03

Only division by zero with integers will raise an ArithmeticException. Division by zero with double or float will result in Infinity.

查看更多
该账号已被封号
7楼-- · 2019-01-19 12:11

The answer lies in your program's own output - it prints "Infinity" for result. This is because Java only disallows integer division by zero - floating point division by zero is legal and produces Infinity.

See the documentation of Double and Float for the POSITIVE_INFINITY and NEGATIVE_INFINITY constants.

查看更多
登录 后发表回答