web-dev-qa-db-fra.com

"Instruction de retour manquante" dans if/for/while

J'ai une question concernant les instructions return utilisées dans les instructions if(), while() ou for() . Comme vous pouvez le constater dans la méthode suivante, il est attendu que je return une valeur String . Le problème est que si je devais utiliser un return statement dans mon bloc if statement, le compilateur renvoie l'erreur missing return statement.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
}

Bien sûr, je pourrais changer l'en-tête de la méthode en void et utiliser System.out.println au lieu de return. Mais est-ce la bonne façon de le faire? est-ce que je manque quelque chose?

Toute aide est grandement appréciée.

11
user3531560

Si vous mettez l'instruction return dans l'instruction if, while ou for, elle peut renvoyer ou non une valeur. Si elle n'entre pas dans ces instructions, cette méthode doit également renvoyer une valeur (qui peut être null). Pour vous en assurer, le compilateur vous obligera à écrire cette instruction return qui est après if, while ou for.

Mais si vous écrivez un bloc if/else et que chacun d'entre eux contient un retour, le compilateur sait que l'un ou l'autre if ou else sera exécuté et que la méthode retournera une valeur. Donc, cette fois, le compilateur ne vous forcera pas.

if(condition)
{
 return;
}
else
{
 return;
}
6
Bhushan Kawadkar

C'est parce que la fonction a besoin pour renvoyer une valeur. Imaginez ce qui se passe si vous exécutez myMethod() et que la fonction if(condition) ne soit pas renvoyée, que retournera votre fonction? Le compilateur a besoin de savoir quoi retourner dans chaque exécution possible de votre fonction

Vérification de la documentation Java:

Définition: Si une déclaration de méthode a un type de retour, il doit y avoir être une déclaration de retour à la fin de la méthode. Si le retour instruction n'est pas là l'erreur d'erreur de déclaration manquante est renvoyée.

Cette erreur est également générée si la méthode n'a pas de type de retour et n’a pas été déclaré nul (c’est-à-dire qu’il a été omis par erreur).

Vous pouvez faire pour résoudre votre problème:

public String myMethod()
{
    String result = null;
    if(condition)
    {
       result = x;
    }
    return result;
}
3
Guillermo Merino

Essayez avec, comme si if condition renvoie false, donc il retournera vide sinon rien à retourner.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
return ""
}

Parce que le compilateur ne sait pas si l'un de ces blocs sera atteint, cela vous donnera une erreur.

2
bNd

C'est syntaxe illégale . C'est pas un optionnel chose pour vous de retourner une variable. Vous DEVEZ renvoyer une variable du type que vous spécifiez dans votre méthode.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
}

Vous dites effectivement que je promets que toute classe peut utiliser cette méthode (public) et je promets qu’elle renverra toujours une chaîne (chaîne).

Ensuite, vous dites que SI ma condition est vraie, je retournerai x. Eh bien c'est dommage, il n'y a pas de SI dans votre promesse. Vous avez promis que myMethod retournera TOUJOURS une chaîne. Même si votre condition est TOUJOURS vraie, le compilateur doit supposer qu'il est possible que ce soit faux. Par conséquent, vous devez toujours mettre un retour à la fin de votre méthode non-nulle en dehors de toute condition. JUSTE EN CAS, toutes vos conditions échouent.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
  return ""; //or whatever the default behavior will be if all of your conditions fail to return.
}
2
CodeCamper

Vous devez ajouter une instruction return si la variable condition est false.

public String myMethod() {
    if(condition) {
        return x;
    }

//  if condition is false you HAVE TO return a string
//  you could return a string, a empty string or null
    return otherCondition;  
}

FYI:

Oracle docs pour l'instruction de retour

0
d3vnico

C'est parce que si vous n'entrez pas dans le si, il n'y a rien à revenir, alors il manque un retour. :)

devrait être :

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    return y;
}
0
Clad Clad

Cela retournera la chaîneuniquement sila condition est vraie.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    else
       return "";
}
0
Deepak Tiwari

Comment myMethod () doit-il renvoyer une valeur de type String ans est non, vous devez donc définir la valeur de retour null ou une valeur de chaîne dans une condition fausse

public String myMethod() {
    boolean c=true;
    if (conditions) {
        return "d";
    }
    return null;//or some other string value
}
0
loknath

essaye ça:

public String myMethod()
{
    if(condition)
    {
       return x;
    }

   return ""; //returns empty string
}
0
Plengo
public String myMethod() // it ALWAYS expects a String to be returned
{
    if(condition) // will not execute always. Will execute only when condition is true
    {
       return x; // will not be returned always.
    }
   //return empty string here

}
0
TheLostMind