Eu tenho um dispositivo I2C que quer duas inputs: um denominador e um numerador. Ambos são gravados em endereços separados, portanto, nenhum cálculo real ( numerator/denominator
) é feito. O problema com isso é que uma divisão por zero poderia ocorrer no dispositivo I2C, portanto, um erro de divisão por zero precisa ser verificado. Idealmente, exatamente a mesma coisa aconteceria se a divisão fosse feita pelo código java.
No momento, eu coloquei uma variável não usada que faz a divisão, mas estou preocupado que ela seja otimizada:
public void setKp(int numerator, int divisor) { int zeroCheck = numerator / divisor; //... doesn't use zeroCheck }
Certamente há uma maneira melhor!
Você não deve jogar uma ArithmeticException. Como o erro está nos argumentos fornecidos, lance uma IllegalArgumentException
. Como a documentação diz:
Lançada para indicar que um método foi aprovado em um argumento ilegal ou inadequado.
O que é exatamente o que está acontecendo aqui.
if (divisor == 0) { throw new IllegalArgumentException("Argument 'divisor' is 0"); }
Faça isso:
if (denominator == 0) throw new ArithmeticException("denominator == 0");
ArithmeticException é a exceção que normalmente é lançada quando você divide por 0.
public class ZeroDivisionException extends ArithmeticException { // ... } if (denominator == 0) { throw new ZeroDivisionException(); }
Existem duas maneiras de fazer isso. Crie sua própria class de exceção personalizada para representar um erro de divisão por zero ou lance o mesmo tipo de exceção que o Java Runtime lançaria nessa situação.
public class DivideByZeroException() extends ArithmeticException { }
Em seguida, no seu código, você verificaria uma divisão por zero e lançaria essa exceção:
if (divisor == 0) throw new DivideByZeroException();
Adicione ao seu código a verificação de uma divisão por zero e lance uma exceção aritmética:
if (divisor == 0) throw new java.lang.ArithmeticException("/ by zero");
Além disso, você pode considerar lançar uma exceção de argumento ilegal, pois um divisor de zero é um argumento incorreto para passar para o método setKp ():
if (divisor == 0) throw new java.lang.IllegalArgumentException("divisor == 0");
Algo como:
if(divisor == 0) { throw new ArithmeticException("Division by zero!"); }