Verwenden Sie switch-Anweisung, um eine Zeichenfolge mit einer enum zu vergleichen

8

Ich mache (meine eigene Version von) Roulette mit Java, und eine der Arten von Wetten, die ein Spieler machen kann, ist die Farbe zu wählen, die gerollt werden soll. (Sogar ist schwarz, ungerade ist rot). Gibt es eine Möglichkeit, eine switch-Anweisung zu verwenden, um eine Zeichenfolge mit einer Aufzählung zu vergleichen?

%Vor%

Das ist, was ich versuche zu bekommen, aber es lässt mich nicht die enum 'Farben' in einer switch-Anweisung verwenden.

    
gm95 07.11.2013, 13:58
quelle

2 Antworten

12

Sie müssen eine Instanz eines Aufzählungstyps (ihr Mitglied ) haben, auf den Sie wechseln. Sie versuchen, die Enum-Klasse selbst einzuschalten, was ein bedeutungsloses Konstrukt ist. Du brauchst wahrscheinlich

%Vor%

Übrigens sollte der Name Colors , nicht colors sein, um die sehr wichtige und nicht-optionale Java-Namenskonvention zu respektieren.

    
Marko Topolnik 07.11.2013, 14:00
quelle
3

Sie können eine Aufzählung aus einer Zeichenfolge mit Enum.valueOf() . Achte darauf, dass die anderen Antworten nicht erwähnen, dass Enum.valueOf() eine IllegalArgumentException liefert, wenn eine Zeichenfolge übergeben wird, die kein gültiges Mitglied der Enumeration ist.

Achten Sie darauf, dass Sie Ihren Code richtig formatieren und einrücken, er hilft uns (und Ihnen!), ihn zu lesen und zu verstehen, was vor sich geht:

%Vor%

Beachten Sie, dass wir nun guess in beiden Fällen zurückgeben, was etwas überflüssig ist. Zumindest mit dem Beispielcode, den Sie angegeben haben, müssen Sie colorVerify überhaupt nicht verfolgen, da die Methode so lange weiterläuft, bis eine gültige Farbe eingegeben wird. Sie könnten die gesamte switch -Anweisung in meiner Methode einfach durch return guess; ersetzen, da Sie wissen, dass es eine gültige Schätzung ist, sobald Color.valueOf() einen Wert zurückgibt.

Mit anderen Worten, Sie könnten Ihren Code bis zu:

reinigen %Vor%

Beachten Sie, dass die Methode static jetzt ist und eine try-with-resources blockieren, um die Scanner zu schließen, sobald Sie damit fertig sind.

    
dimo414 07.11.2013 14:21
quelle

Tags und Links