我想要两个输入一个I2C设备:分母和分子一个。 两者都写入到单独的地址,所以没有实际计算( numerator/denominator
)完成。 这里的问题是,通过零鸿沟可以在I2C设备上出现,所以需要检查由零错误鸿沟。 理想的情况是,如果准确的划分是由java代码做同样的事情会发生。
此刻,我bodged未使用的变量,做除法,但我担心它会得到优化掉了:
public void setKp(int numerator, int divisor)
{
int zeroCheck = numerator / divisor;
//... doesn't use zeroCheck
}
肯定有一个更好的办法!
你不应该抛出ArithmeticException。 由于错误是在所提供的参数,抛出IllegalArgumentException
。 由于文档说:
抛出的异常表明向方法传递了一个不合法或不正确的说法。
这正是是怎么回事。
if (divisor == 0) {
throw new IllegalArgumentException("Argument 'divisor' is 0");
}
做这个:
if (denominator == 0) throw new ArithmeticException("denominator == 0");
ArithmeticException是当你除以0这通常是抛出的异常。
public class ZeroDivisionException extends ArithmeticException {
// ...
}
if (denominator == 0) {
throw new ZeroDivisionException();
}
有两种方法可以做到这一点。 创建自己的自定义异常类零错误表示除法或引发同一类型的异常的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");
就像是:
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?