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.
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;
}
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;
}
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.
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.
}
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:
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;
}
Cela retournera la chaîneuniquement sila condition est vraie.
public String myMethod()
{
if(condition)
{
return x;
}
else
return "";
}
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
}
essaye ça:
public String myMethod()
{
if(condition)
{
return x;
}
return ""; //returns empty string
}
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
}