Eri*_*ric 24 java math exception divide-by-zero
我有一个需要两个输入的I2C设备:分母和分子.两者都写入单独的地址,因此不进行实际的计算(numerator/denominator).这样做的问题是在I2C器件上可能会出现除零,因此需要检查除零误差.理想情况下,如果划分由java代码完成,则会发生完全相同的事情.
目前,我已经提供了一个未使用的变量进行划分,但我担心它会被优化掉:
public void setKp(int numerator, int divisor)
{
int zeroCheck = numerator / divisor;
//... doesn't use zeroCheck
}
Run Code Online (Sandbox Code Playgroud)
当然有更好的方法!
Jor*_*ren 52
你应该不是抛出一个ArithmeticException.由于错误在提供的参数中,因此抛出一个IllegalArgumentException.正如文件所说:
抛出以指示方法已被传递非法或不适当的参数.
这正是这里发生的事情.
if (divisor == 0) {
throw new IllegalArgumentException("Argument 'divisor' is 0");
}
Run Code Online (Sandbox Code Playgroud)
uck*_*man 16
做这个:
if (denominator == 0) throw new ArithmeticException("denominator == 0");
Run Code Online (Sandbox Code Playgroud)
ArithmeticException是除以0时通常抛出的异常.
public class ZeroDivisionException extends ArithmeticException {
// ...
}
if (denominator == 0) {
throw new ZeroDivisionException();
}
Run Code Online (Sandbox Code Playgroud)
小智 8
有两种方法可以做到这一点.要么创建自己的自定义异常类来表示除以零的错误,要么抛出java运行时在这种情况下抛出的相同类型的异常.
public class DivideByZeroException() extends ArithmeticException {
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,您将检查除以零并抛出此异常:
if (divisor == 0) throw new DivideByZeroException();
Run Code Online (Sandbox Code Playgroud)
在代码中添加除以零的检查并抛出算术异常:
if (divisor == 0) throw new java.lang.ArithmeticException("/ by zero");
Run Code Online (Sandbox Code Playgroud)
另外,你可以考虑抛出一个非法的参数异常,因为除数为零是一个不正确的参数传递给你的setKp()方法:
if (divisor == 0) throw new java.lang.IllegalArgumentException("divisor == 0");
Run Code Online (Sandbox Code Playgroud)