我应该如何在Java中抛出除以零的异常而不实际除以零?

2022-09-01 12:24:56

我有一个I2C设备,需要两个输入:分母和分子。两者都写入单独的地址,因此不会进行实际的计算()。这样做的问题是,在I2C器件上可能会发生除以零的情况,因此需要检查除以零的误差。理想情况下,如果分割是由java代码完成的,也会发生完全相同的事情。numerator/denominator

目前,我已经使用了一个未使用的变量来进行除法,但我担心它会得到优化:

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

当然有更好的方法!


答案 1

不应该抛出一个算术异常。由于错误位于提供的参数中,因此请抛出一个 .正如文档所说:IllegalArgumentException

抛出以指示方法已通过非法或不适当的参数。

这正是这里正在发生的事情。

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

答案 2

请执行下列操作:

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

ArithmeticException是通常被0除以时引发的异常。