2013-07-31 4 views
10

Bin ich ein switch Aussage haben darf, die, was zurückzukehren entscheidet? Zum Beispiel möchte ich etwas anderes zurückgeben, basierend auf dem, was meine random generator einfallen lässt. Eclipse gibt mir eine Fehlermeldung, dass ich die return Anweisung außerhalb der switch setzen soll. Ich bin mir nicht sicher, was ich suchen soll, wenn es sich um ein Duplikat handelt. Hier ist mein Code:Kann ich eine return-Anweisung in einer switch-Anweisung

public String wordBank() { //Error here saying: "This method must return a type of string" 
     String[] wordsShapes = new String[10]; 
     wordsShapes[1] = "square"; 
     wordsShapes[2] = "circle"; 
     wordsShapes[3] = "cone"; 
     wordsShapes[4] = "prisim"; 
     wordsShapes[5] = "cube"; 
     wordsShapes[6] = "cylinder"; 
     wordsShapes[7] = "triangle"; 
     wordsShapes[8] = "star"; 
     wordsShapes[9] = "moon"; 
     wordsShapes[10] = "paralellogram"; 

     Random rand = new Random(); 
     int i = rand.nextInt(11); 

     if (i == 0) { 
      i = rand.nextInt(11); 
     } 

     switch (i) { 
     case 1: 
      return wordsShapes[1].toString(); 
     case 2: 
      return wordsShapes[2].toString(); 
     case 3: 
      return wordsShapes[3].toString(); 
     case 4: 
      return wordsShapes[4].toString(); 
     case 5: 
      return wordsShapes[5].toString(); 
     case 6: 
      return wordsShapes[6].toString(); 
     case 7: 
      return wordsShapes[7].toString(); 
     case 8: 
      return wordsShapes[8].toString(); 
     case 9: 
      return wordsShapes[9].toString(); 
     case 10: 
      return wordsShapes[10].toString(); 
     } 
    } 
+0

Mögliches Duplikat von [Switch-Anweisung mit returns - code correctness] (http://stackoverflow.com/questions/3065438/switch-statement-with-returns-code-correctness) –

Antwort

8

Sorry, aber in diesem Fall, warum nicht nur einfach tun:

Auf diese Weise können Sie den Schalter vermeiden und alle.

Hoffnung, die hilft,

2

Das Problem ist nicht, dass Sie Aussagen haben Rückkehr in der switch Aussage, die völlig in Ordnung ist, aber Sie haben keine Rückkehr nach der switch-Anweisung. Wenn Ihre Switch-Anweisung abgeschlossen ist, ohne zurückzukehren, was wird jetzt passieren?

Die Regeln von Java erfordern, dass alle Pfade durch eine Wert zurückgebende Funktion eine return-Anweisung auftreten. In Ihrem Fall, auch wenn Sie wissen, der Wert von i wird immer von einem Wert sein, der eine return aus dem Schalter verursacht, der Java-Compiler ist nicht schlau genug, um das zu bestimmen.

(ASIDE: Übrigens, haben Sie eigentlich nicht den Wert 0 aus verhindern erzeugt wird, vielleicht Ihre if sollte ein while sein.)

NACHTRAG: Falls Sie interessiert sind, hier ist eine Implementierung. Siehe http://ideone.com/IpIwis für das Live-Beispiel.

Beachten Sie die bewährte Methode, den Zufallszahlengenerator außerhalb der Funktion zu definieren.

+0

gibt es ein 'else if'-ähnliches Anweisung, die ich verwenden sollte oder einfach "null zurückgeben"? – Col1107

+2

In Java gibt es einen Standardfall. Siehe jedoch Ramons Antwort für das, was du tun sollst. :) –

+0

Vielen Dank für die Notiz über die if-Anweisung habe das nicht verstanden:) – Col1107

3

Sie return innerhalb switch setzen können, aber Sie brauchen nicht switch in diesem Fall zu verwenden.

0

Die return-Anweisung wird von der gesamten Funktion zurückgegeben, in der es verwendet wird.So ist es gut, dass keine anderen nützlichen Codezeilen unter dem Schalter vorhanden sein müssen, wenn Sie die return-Anweisung im Switch verwenden möchten.

Verwandte Themen