我有一个需要两个输入的I2C设备:分母和分子。两者都写入单独的地址,因此不进行实际计算(numerator/denominator
)。这样做的问题是在I2C器件上可能会出现除零,因此需要检查除零误差。理想情况下,如果通过java代码完成分割,则会发生完全相同的事情。
目前,我已经提供了一个未使用的变量进行分割,但我担心它会被优化出来:
public void setKp(int numerator, int divisor)
{
int zeroCheck = numerator / divisor;
//... doesn't use zeroCheck
}
当然有更好的方法!
答案 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();
在代码中添加除以零的检查并抛出算术异常:
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!");
}