假设您有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));
所有这些(虽然工作正常)似乎不必要地复杂化。是否有一种更简单的方法来选择随机枚举元素?
答案 0 :(得分:23)
Java的枚举实际上是完全有能力的对象。您可以在enum
声明
public enum LightColor {
Green,
Yellow,
Red;
public static LightColor getRandom() {
return values()[(int) (Math.random() * values().length)];
}
}
允许你像这样使用它:
LightColor randomLightColor = LightColor.getRandom();
答案 1 :(得分:8)
LightColor random = LightColor.values()[(int)(Math.random()*(LightColor.values().length))];
答案 2 :(得分:5)
使用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());
答案 3 :(得分:3)
这应该很简单,如下所示
LightColor[] values = LightColor.values();
LightColor value = values[(int) (Math.random() * 3)];
答案 4 :(得分:0)
您可以将整数id与每个枚举颜色相关联,并使用valueOf(int id)方法返回相应的颜色。这将帮助您摆脱列表..
Tiberiu
答案 5 :(得分:0)
所以阅读Kowser的回答,我在这里提出了一些建议。 给定包含不同颜色的枚举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;
}
甚至有黑名单。