2 votes

Netbeans me donne un message d'erreur mais cela fonctionne comme je le veux

J'ai une sous-classe qui contient une fonction qui retourne un flottant. J'appelle cette fonction dans une instruction try catch, si une instruction if échoue et que le else la capture, je veux que cette fonction "crashe" en retournant rien comme ceci return;

Voici cette fonction :

float calc(... certains arguments ...) {
    ...

    if (operator.equals("+")) number = num1+num2;
    else if (operator.equals("-")) number = num1-num2;
    else if (operator.equals("*")) number = num1*num2;
    else if (operator.equals("/")) number = num1/num2;
    else return; // Ici Netbeans me donne une erreur disant "Valeur de retour manquante"

    return number;
}

Maintenant, cette fonction est appelée dans un try et si le else est exécuté, je veux que la fonction "crashe" et passe à l'instruction catch et donne à l'utilisateur un message d'erreur. Cela fonctionne exactement comme je le veux, mais pourquoi Netbeans me donne-t-il une erreur ?? Y a-t-il un autre moyen de faire cela ?

4voto

rgettman Points 74908

Je ne pense pas que vous vouliez que cela "crashe", mais vous devez indiquer une erreur de quelque sorte. Parce que la méthode ne retourne pas void, le fait de ne rien retourner est une erreur de compilation.

A la place, lancez une IllegalArgumentException.

else throw new IllegalArgumentException("Opérateur illégal : " + operateur);

Assurez-vous simplement que vous retournez effectivement une valeur valide à la fin :

return nombre;

2voto

Henry Keiter Points 8851

Vous ne pouvez pas return; de cette fonction (retour void) car ce n'est pas ainsi que votre méthode est déclarée. Lorsque vous la déclarez comme float calc, vous promettez que vous retournerez toujours une valeur float.

De plus, vous êtes déjà dans un bloc try-catch, donc vous ne voulez de toute façon pas ne rien retourner - ce que vous voulez faire est jeter une Exception à attraper. Assurez-vous que quelle que soit l'Exception que vous lancez, elle est appropriée pour votre cas particulier. Comme je ne sais rien de ce que fait votre fonction, ce n'est pas à moi de dire quel type d'Exception vous devriez lancer.

public float calc(float[] args) throws Exception { // Utilisez une Exception plus spécifique !
    // faire des trucs
    if (quelqueChoseNeVaPas) {
        throw new Exception("quelque chose ne va pas!");
    }
    return nombre; // Toujours retourner un float !
}

2voto

Eugen Halca Points 1745

Utilisez des Exceptions pour cela.

par ex.

si "opérateur" est l'un de vos arguments utilisez IllegalArgumentException :

function calc(... certains arguments ...) {
    ...

    if (operator.equals("+")) number = num1+num2;
    else if (operator.equals("-")) number = num1-num2;
    else if (operator.equals("*")) number = num1*num2;
    else if (operator.equals("/")) number = num1/num2;
    else throw new IllegalArgumentException();
}

ou si vous voulez une approche plus spécifique, étendez RuntimeException, quelque chose comme MyAppIllegalOperatorException, et lancez/attrapez-en une

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X