2017-02-15 20 views
0

Ich habe eine sehr einfache Frage über die folgende toString() -Methode, die ich unten erstellt habe. Wenn also eine Arraylist mit dem Inhalt ist {Apfel, Banane, Traube} wurde ich wonderning nur, wenn die Methode:Fehler bei der Rückgabe in einer Methode

public String toString() 
{ 
    for (int d = 0; d < words.size(); d++) 
    { 
     return "The word: " + words.get(d); 
    } 
    return ""; 
} 

zurückkehren würde:

The word: apple 
The word: banana 
The word: grape 

Der Grund, dass ich diese Frage zu stellen ist denn wenn ich die Linie ommited:

return ""; 

ich einen Fehler bekam die Anweisung return sagte fehlt, so dachte ich, der Computer die return-Anweisung möglicherweise nicht erkennen:

"return "The word: " + words.get(d);" 

und statt der Rückkehr:

The word: apple 
The word: banana 
The word: grape 

Es wäre zurück:

null or "" 

Ich bin nicht sicher, ob dies notwendig ist, aber ich habe auch nur im Code zu setzen, die ich hatte Bevor ich den Fehler bekommen habe, fehlt die Return-Anweisung.

public String toString() 
{ 
    for (int d = 0; d < words.size(); d++) 
    { 
     return "The word: " + words.get(d); 
    } 
} 

Der genaue Fehler war eine rote Linie, die die vorletzte geschlossene Klammer umkreiste. Die genaue Fehlermeldung lautete: „eine return-Anweisung fehlt“

Update 1:

Ich schätze all die Hilfe und konstruktive Kritik an dem Code wirklich, die ich bekommen kann. Ich hoffe, ich habe diese einfache Frage nicht zu komplex gemacht. Vielen Dank :)

Update 2:

Es tut mir leid für so viele Notizen. Wie auch immer, ich habe mich nur gefragt, ob das eine häufige Frage ist, die jeder von euch sieht, weil es so aussieht, als käme das viel im Unterricht auf, und der Lehrer kann die Frage nicht beantworten. Nochmals vielen Dank :)

+0

Ihre Methode scheint nicht sinnvoll zu sein, weil es nicht _which_ Frucht kann es sollte herausfinden gedruckt werden, daher iteriert es über alle von ihnen. Was den Fehler betrifft, hat der Compiler festgestellt, dass, wenn die 'for'-Schleife nicht ausgeführt werden sollte, nach dieser Schleife eine return-Anweisung vorhanden sein muss. Wenn Sie 'return '" 'löschten, haben Sie den Code zerstört. –

+0

Warum setzen Sie eine Anweisung "return" in eine Schleife? Das bedeutet, dass Sie beim ersten Durchlauf der Schleife von der Methode zurückkehren und niemals den Rest der Schleife durchlaufen. Eine Methode, die einen Wert zurückgibt, gibt nur einen Wert zurück. Wie denkst du, dass die Methode drei verschiedene Werte zurückgeben würde? – ajb

+0

Um deine letzten Fragen zu beantworten: (1) Ich habe mehrere andere Beiträge hier gesehen, wo Fragesteller eine Schleife mit einer "Return" -Anweisung wie dieser geschrieben haben und nicht verstanden haben, warum es falsch war. (2) Wer diese Frage nicht beantworten kann, sollte - zumindest im Informatikunterricht - keine Lehrkraft sein. (Bei mir ist es in Ordnung, wenn es ein Englisch-Lit-TA ist.) – ajb

Antwort

1

Sie können nur eine String von Ihrer Methode zurückgeben, nicht die einzelne String (s), die Sie gerade versuchen zu konstruieren. Verwenden Sie stattdessen etwas wie eine StringBuilder, um Ihre gesamte Ausgabe und return einmal zu erstellen.

public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    for (int d = 0; d < words.size(); d++) { 
     sb.append("The word: ").append(words.get(d)) // 
       .append(System.lineSeparator()); 
    } 
    return sb.toString(); 
} 

Oder die weniger effizient (aber immer noch StringBuilder, nur viele temporäre und unsichtbare)

public String toString() { 
    String sb = ""; 
    for (int d = 0; d < words.size(); d++) { 
     sb += "The word: " + words.get(d) + System.lineSeparator(); 
    } 
    return sb; 
} 
+0

Das scheint eine sehr gute Antwort zu sein; Allerdings haben wir StringBuilder noch nicht gelernt. –

+0

Gibt es einen anderen Weg, ich könnte es nur einmal zurückgeben. –

+0

@SteveDav Sie wissen nicht genau, was Sie mit Ihrer Methode zurückgeben möchten. Sie können nur einen 'String' zurückgeben. Was willst du, dass 'String' ist? – ajb

Verwandte Themen