如何在Java中抛出除零异常而不实际除以零?

时间:2009-11-01 18:27:34

标签: java exception math divide-by-zero

我有一个需要两个输入的I2C设备:分母和分子。两者都写入单独的地址,因此不进行实际计算(numerator/denominator)。这样做的问题是在I2C器件上可能会出现除零,因此需要检查除零误差。理想情况下,如果通过java代码完成分割,则会发生完全相同的事情。

目前,我已经提供了一个未使用的变量进行分割,但我担心它会被优化出来:

public void setKp(int numerator, int divisor)
{
    int zeroCheck = numerator / divisor;
    //... doesn't use zeroCheck
}

当然有更好的方法!

5 个答案:

答案 0 :(得分:49)

你应该抛出ArithmeticException。由于错误在提供的参数中,因此抛出IllegalArgumentException。正如documentation所说:

  

抛出以表明方法已被传递为非法或不恰当的参数。

这正是这里发生的事情。

if (divisor == 0) {
    throw new IllegalArgumentException("Argument 'divisor' is 0");
}

答案 1 :(得分:16)

这样做:

if (denominator == 0) throw new ArithmeticException("denominator == 0");

ArithmeticException是一个异常,通常在除以0时抛出。

答案 2 :(得分:8)

public class ZeroDivisionException extends ArithmeticException {
    // ...
}

if (denominator == 0) {
    throw new ZeroDivisionException();
}

答案 3 :(得分:8)

有两种方法可以做到这一点。创建自己的自定义异常类以表示除零错误,或者抛出java运行时在这种情况下将抛出的相同类型的异常。

定义自定义异常

public class DivideByZeroException() extends ArithmeticException {
}

然后在您的代码中,您将检查除以零并抛出此异常:

if (divisor == 0) throw new DivideByZeroException();

抛出ArithmeticException

在代码中添加除以零的检查并抛出算术异常:

if (divisor == 0) throw new java.lang.ArithmeticException("/ by zero");

此外,您可以考虑抛出非法参数异常,因为除数为零是传递给setKp()方法的错误参数:

if (divisor == 0) throw new java.lang.IllegalArgumentException("divisor == 0");

答案 4 :(得分:3)

类似的东西:

if(divisor == 0) {
  throw new ArithmeticException("Division by zero!");
}