Como devo lançar uma exceção de divisão por zero em Java sem realmente dividir por zero?

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.

Definir exceção customizada

 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(); 

Jogar aritméticaException

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!"); } 
Intereting Posts