web-dev-qa-db-fra.com

Comment dois-je lancer une exception de division par zéro dans Java sans réellement diviser par zéro?

J'ai un appareil I2C qui veut deux entrées: un dénominateur et un numérateur. Les deux sont écrits dans des adresses distinctes, donc aucun calcul réel (numerator/denominator) est fait. Le problème avec cela est qu'une division par zéro pourrait se produire sur le périphérique I2C, donc une erreur de division par zéro doit être vérifiée. Idéalement, exactement la même chose se produirait si la division était effectuée par le code Java.

Pour le moment, j'ai anticipé une variable inutilisée qui fait la division, mais je crains qu'elle ne soit optimisée:

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

Il y a sûrement une meilleure façon!

23
Eric

Vous ne devez pas lever une ArithmeticException. Puisque l'erreur se trouve dans les arguments fournis, lancez un IllegalArgumentException. Comme le dit documentation :

Lancé pour indiquer qu'une méthode a été passée un argument illégal ou inapproprié.

C'est exactement ce qui se passe ici.

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

Faites ceci:

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

ArithmeticException est l'exception qui est normalement levée lorsque vous divisez par 0.

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

if (denominator == 0) {
    throw new ZeroDivisionException();
}
8
João Silva

Il y a deux façons de procéder. Vous pouvez soit créer votre propre classe d'exceptions personnalisée pour représenter une erreur de division par zéro, soit lever le même type d'exception que le runtime Java lancerait dans cette situation).

Définir une exception personnalisée

public class DivideByZeroException() extends ArithmeticException {
}

Ensuite, dans votre code, vous vérifieriez une division par zéro et lèveriez cette exception:

if (divisor == 0) throw new DivideByZeroException();

Lancer ArithmeticException

Ajoutez à votre code la vérification d'une division par zéro et lancez une exception arithmétique:

if (divisor == 0) throw new Java.lang.ArithmeticException("/ by zero");

De plus, vous pouvez envisager de lancer une exception d'argument non valide, car un diviseur de zéro est un argument incorrect à passer à votre méthode setKp ():

if (divisor == 0) throw new Java.lang.IllegalArgumentException("divisor == 0");
8
slangevi

Quelque chose comme:

if(divisor == 0) {
  throw new ArithmeticException("Division by zero!");
}
3
Bart Kiers