在java中,我应该如何抛出被零除的异常而不实际被零除呢?

ztmd8pv5  于 2021-07-05  发布在  Java
关注(0)|答案(5)|浏览(431)

我有一个i2c设备,需要两个输入:分母和分子。两者都写在不同的地址,所以没有实际的计算( numerator/denominator )完成了。问题是i2c设备上可能会出现被零除的情况,因此需要检查被零除的错误。理想情况下,如果用java代码进行除法,同样的事情也会发生。
目前,我已经预感到一个未使用的变量会进行除法,但我担心它会得到优化:

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

当然有更好的办法!

41ik7eoe

41ik7eoe1#

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

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

nimxete22#

比如:

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

5lhxktic3#

你不应该抛出算术异常。因为错误在提供的参数中,所以抛出 IllegalArgumentException . 正如文件所说:
抛出以指示已向方法传递非法或不适当的参数。
这正是这里发生的事情。

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

ds97pgxw4#

请执行以下操作:

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

算术异常是通常在除以0时引发的异常。

f2uvfpb9

f2uvfpb95#

有两种方法可以做到这一点。要么创建自己的自定义异常类来表示被零除的错误,要么抛出与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");

相关问题