分母と分子の2つの入力を必要とするI2Cデバイスがあります。両方とも別々のアドレスに書き込まれるため、実際の計算はありません(numerator/denominator
) 終わらせる。これに伴う問題は、I2Cデバイスでゼロ除算が発生する可能性があるため、ゼロ除算エラーをチェックする必要があることです。理想的には、Javaコードによって分割が行われた場合、まったく同じことが起こります。
現時点では、除算を行う未使用の変数を束ねていますが、最適化されるのではないかと心配しています。
public void setKp(int numerator, int divisor)
{
int zeroCheck = numerator / divisor;
//... doesn't use zeroCheck
}
きっともっと良い方法があります!
ArithmeticExceptionをスローする必要がありますnot。指定された引数にエラーがあるため、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();
}
これを行うには2つの方法があります。ゼロ除算エラーを表す独自のカスタム例外クラスを作成するか、この状況で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");
何かのようなもの:
if(divisor == 0) {
throw new ArithmeticException("Division by zero!");
}