我应该如何在Java中抛出被零除例外不被零除实际?(How should I throw a div

2019-09-03 13:22发布

我想要两个输入一个I2C设备:分母和分子一个。 两者都写入到单独的地址,所以没有实际计算( numerator/denominator )完成。 这里的问题是,通过零鸿沟可以在I2C设备上出现,所以需要检查由零错误鸿沟。 理想的情况是,如果准确的划分是由java代码做同样的事情会发生。

此刻,我bodged未使用的变量,做除法,但我担心它会得到优化掉了:

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

肯定有一个更好的办法!

Answer 1:

应该抛出ArithmeticException。 由于错误是在所提供的参数,抛出IllegalArgumentException 。 由于文档说:

抛出的异常表明向方法传递了一个不合法或不正确的说法。

这正是是怎么回事。

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


Answer 2:

做这个:

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

ArithmeticException是当你除以0这通常是抛出的异常。



Answer 3:

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

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


Answer 4:

有两种方法可以做到这一点。 创建自己的自定义异常类零错误表示除法或引发同一类型的异常的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");


Answer 5:

就像是:

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


文章来源: How should I throw a divide by zero exception in Java without actually dividing by zero?