2014-04-14 10 views
6

Ho una domanda riguardante le dichiarazioni di reso utilizzate all'interno delle dichiarazioni if()while() o for(). Come si può vedere nel seguente metodo, si prevede che I return un valore di stringa. Il problema è che se dovessi usare un return all'interno del mio blocco di istruzioni if, il compilatore restituirebbe l'errore missing return statement."Istruzione di reso mancante" all'interno di if/for/while

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

Naturalmente potrebbe cambiare l'intestazione metodo di void e utilizzare System.out.println anziché return. Ma è questo il modo giusto per farlo? mi sto perdendo qualcosa?

Qualsiasi aiuto è molto apprezzato.

+2

Cosa succede se la condizione non è vera? Che cosa restituisce il tuo metodo in questo caso? – devnull

+0

È possibile restituire un valore predefinito (come null), se il valore non viene trovato. Quando si chiama il metodo, si controlla se il valore è uguale al valore predefinito e può quindi verificare se il valore restituito deve essere ulteriormente elaborato. – Pphoenix

+0

si dovrebbe aggiungere un'istruzione 'return' dopo' if' o in un'istruzione 'else' –

risposta

5

Se si mette ritorno economico if, while o for dichiarazione allora può o non può restituire valore. Se non entrerà in queste istruzioni, anche quel metodo dovrebbe restituire un valore (che potrebbe essere nullo). Per garantire che, il compilatore ti costringerà a scrivere questa dichiarazione di ritorno che è dopo if, while o for.

Ma se si scrive if/else blocco e ognuno di loro sta avendo il ritorno in esso allora compilatore sa che o if o else sarà ottenere l'esecuzione e il metodo restituirà un valore. Quindi questo compilatore di tempo non ti costringerà.

if(condition) 
{ 
return; 
} 
else 
{ 
return; 
} 
+0

Penso che nel complesso dovrebbe solo imparare che ha bisogno di fare un ritorno prima dell'ultima parentesi di ogni metodo non vuoto. Perché riformulerà la sua domanda con quell'altro circondato di lì a poco la prossima volta. – CodeCamper

+0

Direi che l'utilizzo di più dichiarazioni di reso non è una soluzione. È meglio avere una sola istruzione 'return' alla fine della funzione/metodo. –

3

Questo perché la funzione necessita di per restituire un valore. Immagina cosa succede se esegui myMethod() e non va in if(condition) cosa restituirebbe la tua funzione? Il compilatore ha bisogno di sapere che cosa per tornare in ogni possibile l'esecuzione della funzione

Controllo documentazione di Java:

Definizione: Se una dichiarazione di metodo ha un tipo di ritorno allora ci deve essere una dichiarazione di ritorno alla fine del metodo. Se l'istruzione restituita non è presente, viene generato l'errore dell'istruzione di reso mancante.

Questo errore viene generato anche se il metodo non ha un tipo restituito e non è stato dichiarato utilizzando void (cioè, è stato erroneamente omesso).

si può fare per risolvere il problema:

public String myMethod() 
{ 
    String result = null; 
    if(condition) 
    { 
     result = x; 
    } 
    return result; 
} 
0

E 'perché se non si va in se, non c'è nulla da restituire, quindi manca un ritorno. :)

dovrebbe essere:

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

Ciò restituirà la stringa solo se la condizione è vera.

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

'null' sono sempre ** BAD ** ritorno chiama !!! –

+0

Fatto bene, grazie. –

2

Prova con, come se if condition restituisce false, in modo che tornerà nulla vuoto altrimenti per tornare.

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

Perché il compilatore non sa se qualcuno di quei blocchi verrà mai raggiunto, quindi ti sta dando un errore.

0

provare questo:

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

    return ""; //returns empty string 
} 
0
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 

} 
2

Questo è sintassi illegalenon un opzionale cosa per voi per restituire una variabile. È necessario restituire una variabile del tipo specificato nel metodo.

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

si sta effettivamente dicendo, prometto ogni classe può utilizzare questo metodo (pubblico) e prometto che restituirà sempre una stringa (String).

Quindi stai dicendo SE la mia condizione è vera, restituirò x. Beh, questo è un peccato, non c'è IF nella tua promessa. Hai promesso che myMethod restituirà SEMPRE una stringa. Anche se la tua condizione è SEMPRE vera, il compilatore deve presupporre che ci sia la possibilità che sia falso. Di conseguenza, devi sempre restituire un valore alla fine del tuo metodo non vuoto al di fuori delle condizioni JUST IN CASE tutte le tue condizioni falliscono.

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

È necessario aggiungere un estratto conto se lo condition è falso.

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 for return statement

0

Qualsiasi come myMethod() dovrebbe restituire un valore String .che se la sua condizione è falsa è MyMethod restituire qualcosa? no, quindi è necessario definire il valore restituito null o qualche valore stringa in false condizioni

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