如何随机化枚举元素?
假设你有一些包含一些元素的enum
public enum LightColor { RED, YELLOW, GREEN }
并想随意挑选任何颜色。
我把颜色放进去了
public List lightColorChoices = new ArrayList(); lightColorChoices.add(LightColor.GREEN); lightColorChoices.add(LightColor.YELLOW); lightColorChoices.add(LightColor.RED);
然后选择一个随机颜色:
this.lightColor = lightColorChoices.get((int) (Math.random() * 3));
所有这些(虽然工作正常)似乎不必要地复杂化。 是否有更简单的方法来选择随机枚举元素?
Java的枚举实际上是完全有能力的对象。 您可以向enum
声明添加方法
public enum LightColor { Green, Yellow, Red; public static LightColor getRandom() { return values()[(int) (Math.random() * values().length)]; } }
这将允许您像这样使用它:
LightColor randomLightColor = LightColor.getRandom();
LightColor random = LightColor.values()[(int)(Math.random()*(LightColor.values().length))];
使用Enum.values()获取所有可用选项,并使用指定最大值的Random.nextInt()方法。 例如:
private static Random numberGenerator = new Random(); public T randomElement(T[] elements) return elements[numberGenerator.nextInt(elements.length)]; }
然后可以这样调用:
LightColor randomColor = randomElement(LightColor.values());
这应该很简单,如下所示
LightColor[] values = LightColor.values(); LightColor value = values[(int) (Math.random() * 3)];
您可以将整数id与每个枚举颜色相关联,并使用valueOf(int id)方法返回相应的颜色。 这将帮助您摆脱列表..
Tiberiu
所以阅读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; }
甚至有一个黑名单。