Как рандомизировать элементы перечисления?
Скажите, что у вас есть enum
с некоторыми элементами
public enum LightColor {
RED, YELLOW, GREEN
}
И хотел бы случайно выбрать любой цвет из него.
Я поместил цвета в
public List<LightColor> lightColorChoices = new ArrayList<LightColor>();
lightColorChoices.add(LightColor.GREEN);
lightColorChoices.add(LightColor.YELLOW);
lightColorChoices.add(LightColor.RED);
И затем выбрал случайный цвет, например:
this.lightColor = lightColorChoices.get((int) (Math.random() * 3));
Все это (при работе отлично) кажется излишне сложным. Есть ли более простой способ выбрать случайный элемент перечисления?
Ответы
Ответ 1
Java перечисления фактически являются полностью способными объектами. Вы можете добавить метод к объявлению enum
public enum LightColor {
Green,
Yellow,
Red;
public static LightColor getRandom() {
return values()[(int) (Math.random() * values().length)];
}
}
Это позволит вам использовать его следующим образом:
LightColor randomLightColor = LightColor.getRandom();
Ответ 2
LightColor random = LightColor.values()[(int)(Math.random()*(LightColor.values().length))];
Ответ 3
Используйте Enum.values (), чтобы получить все доступные параметры и использовать Метод Random.nextInt(), определяющий максимальное значение. например:
private static Random numberGenerator = new Random();
public <T> T randomElement(T[] elements)
return elements[numberGenerator.nextInt(elements.length)];
}
Затем это можно вызвать как таковое:
LightColor randomColor = randomElement(LightColor.values());
Ответ 4
Это должно быть просто, как показано ниже
LightColor[] values = LightColor.values();
LightColor value = values[(int) (Math.random() * 3)];
Ответ 5
Вы можете связать целочисленный идентификатор с каждым цветом перечисления и иметь метод valueOf (int id), который возвращает соответствующий цвет. Это поможет вам избавиться от списка.
Тибериу
Ответ 6
Поэтому, читая ответ Коузера, я придумал что-то здесь.
Учитывая перечисление ChatColor, содержащее разные цвета, вы можете сделать следующее:
private ChatColor getRandomColor() {
ChatColor randomColor = ChatColor.values()[random.nextInt(ChatColor
.values().length - 1)];
ChatColor[] blacklist = { ChatColor.BOLD, ChatColor.ITALIC,
ChatColor.MAGIC, ChatColor.RESET, ChatColor.STRIKETHROUGH,
ChatColor.UNDERLINE };
while (Arrays.asList(blacklist).contains(randomColor)) {
randomColor = ChatColor.values()[random
.nextInt(ChatColor.values().length)];
}
return randomColor;
}
и даже иметь черный список.