2016-06-09 12 views
-3
public class Test { 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Test test = new Test(); 
    String str = test.methodTest(); 
    System.out.println("Output : "+str); 
} 

public String methodTest(){ 

    for(int i=0;i<10;i++){ 
     if(i==5){ 
      return new String("We got 5 :)"); 
     } 
    } 

    return null; 
} 

Erwartete Ausgabe für String str = null Ausgang: str = Wir haben 5 :)Warum Methode ist nicht null zurückkehrt, wenn Methode eine andere Rückkehr in Schleife enthält

Kann mir jemand erklären, warum es passiert?

+0

'5' ist kleiner als' 10', daher ist es selbstverständlich, dass die Zeichenfolge zurückgegeben wird. Warum wird die Rückgabe von 'null' erwartet? – MikeCAT

+0

Es ist nur Rückkehr von for-Schleife rechts, wird Code sowieso Null zurückgeben; aswell – Aadi

+3

Nein, 'return' ist die Rückkehr von der Funktion, nicht nur die Schleife. – MikeCAT

Antwort

1

i werden die Werte 0-9 für die Dauer Ihrer for Schleife übernehmen. Dann wird i==5 der Code ausgeführt, der in der if-Anweisung eingeschlossen wird. Diese return s eine Zeichenfolge von "We got 5 :)" und beendet die Methode. Somit wird die zweite return-Anweisung niemals erreicht. Per die documentation,

ein Verfahren kehrt zu dem Code, der es aufgerufen wird, wenn es [...] eine return Anweisung erreicht

erneuten Ausdruck wird Steuerfluss zurück zum Anrufer aufgegeben (in diesem Fall die main Methode) bei dem Auftreten der ersten return Aussage erreicht, die in diesem Fall innerhalb Ihrer for Schleife ist.

-1

Da nur eine return Anweisung für jede method ausgeführt werden kann. Sobald Sie von method zurückkehren, geben Sie das Programm zurück und die Ausführung wird beendet oder beendet. Sie können nur return Wert. Wenn Sie oder mehr Werte zurückgeben möchten, können Sie Werte in das Objekt und dann returnobj eingeben.

+0

Warum down gewählt, habe ich einen Fehler gemacht? –

-1

Es gibt "Wir haben 5" zurück, da es durch 1 bis 10 iteriert und Nummer 5 ist mit in diesem Bereich werden Sie die Zeichenfolge anstelle von Null zurückgeben.

0

Möglicherweise sind Sie mit return und break Anweisung verwirrt. a return beendet die Methode und kehrt zur Anweisung zurück. Aber wenn Sie eine Schleife beenden möchten, benötigen Sie break. Für die erwartete Ausgabe (str == null) auf dem gleichen Code, können Sie verwenden nur i break

public String methodTest(){ 

    for(int i=0;i<10;i++){ 
     if(i==5){ 
      break; 
     } 
    } 

    return null; 
} 
0

Die for Schleife von 1 erhöht wird, beginnend bei 0, bei jeder Iteration. Sobald i gleich 5 ist (daher Ihr Code i==5), wird die if-Anweisung wahr, und dann wird der Code innerhalb ausgeführt. Die return-Anweisung wird dann ausgeführt, die die gesamte Methode beendet und "zurückgibt" an die aufrufende Methode, in diesem Fall die Hauptmethode. Kein anderer Code nach dieser return-Anweisung wird ausgeführt, einschließlich der zweiten return-Anweisung, um den Nullwert zurückzugeben. Wenn Sie möchten, dass die zweite return-Anweisung erreicht wird, können Sie eine globale Variable erstellen oder einen Parameter für methodTest zur Bearbeitung bereitstellen.

Verwandte Themen