12 Stimmen

Wie kann man Enum-Elemente randomisieren?

Angenommen, Sie haben eine enum mit einigen Elementen

public enum LightColor {
   RED, YELLOW, GREEN
}

Und würde gerne eine beliebige Farbe daraus auswählen.

Ich habe Farben in ein

public List<LightColor> lightColorChoices = new ArrayList<LightColor>();

lightColorChoices.add(LightColor.GREEN);
lightColorChoices.add(LightColor.YELLOW);
lightColorChoices.add(LightColor.RED);

Und dann eine zufällige Farbe wie:

this.lightColor = lightColorChoices.get((int) (Math.random() * 3));

All dies scheint (obwohl es gut funktioniert) unnötig kompliziert zu sein. Gibt es einen einfacheren Weg, um eine zufällige enum Element auswählen?

0 Stimmen

Als Ihr Mitentwickler für eine Zufallszahl? ... Tut mir leid, nein.

0 Stimmen

0 Stimmen

Ich denke, dass diese Frage eher dem vorliegenden Problem entspricht (Hinweis: siehe die Antwort von trashgod): stackoverflow.com/questions/1972392/

26voto

Lucas Punkte 12757

Die Enums von Java sind eigentlich vollwertige Objekte. Sie können eine Methode zum enum Erklärung

public enum LightColor {
    Green,
    Yellow,
    Red;

    public static LightColor getRandom() {
        return values()[(int) (Math.random() * values().length)];
    }
}

Das würde es Ihnen ermöglichen, es wie folgt zu verwenden:

LightColor randomLightColor = LightColor.getRandom();

0 Stimmen

Danke, es funktioniert wunderbar!!!

8voto

b_erb Punkte 20272
LightColor random = LightColor.values()[(int)(Math.random()*(LightColor.values().length))];

5voto

Rich O'Kelly Punkte 40414

Verwenden Sie Enum.Werte() um alle verfügbaren Optionen zu erhalten, und verwenden Sie die Random.nextInt() Methode, die den Maximalwert angibt. z.B.:

private static Random numberGenerator = new Random();
public <T> T randomElement(T[] elements)
  return elements[numberGenerator.nextInt(elements.length)];
}

Diese kann dann als solche bezeichnet werden:

LightColor randomColor = randomElement(LightColor.values());

0 Stimmen

+1 für den Vorschlag Random.nextInt() anstelle der Multiplikation mit der Größe

3voto

Kowser Punkte 7973

Dies sollte ganz einfach sein, wie unten gezeigt

LightColor[] values = LightColor.values();
LightColor value = values[(int) (Math.random() * 3)];

0voto

jumping-jack Punkte 237

Man könnte jeder Enum-Farbe eine Integer-ID zuordnen und eine valueOf(int id)-Methode haben, die die entsprechende Farbe zurückgibt. Dies wird Ihnen helfen, die Liste loszuwerden

Tiberiu

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X