Jam*_*sev 11 java random enums
假设你有enum一些元素
public enum LightColor {
RED, YELLOW, GREEN
}
Run Code Online (Sandbox Code Playgroud)
并希望从中随机挑选任何颜色.
我把颜色放进去了
public List<LightColor> lightColorChoices = new ArrayList<LightColor>();
lightColorChoices.add(LightColor.GREEN);
lightColorChoices.add(LightColor.YELLOW);
lightColorChoices.add(LightColor.RED);
Run Code Online (Sandbox Code Playgroud)
然后选择一个随机颜色:
this.lightColor = lightColorChoices.get((int) (Math.random() * 3));
Run Code Online (Sandbox Code Playgroud)
所有这些(虽然工作正常)似乎不必要地复杂化.是否有更简单的方法来选择随机枚举元素?
Luc*_*cas 23
Java的枚举实际上是完全有能力的对象.您可以在enum声明中添加方法
public enum LightColor {
Green,
Yellow,
Red;
public static LightColor getRandom() {
return values()[(int) (Math.random() * values().length)];
}
}
Run Code Online (Sandbox Code Playgroud)
哪个允许你像这样使用它:
LightColor randomLightColor = LightColor.getRandom();
Run Code Online (Sandbox Code Playgroud)
LightColor random = LightColor.values()[(int)(Math.random()*(LightColor.values().length))];
Run Code Online (Sandbox Code Playgroud)
使用Enum.values()获取所有可用选项,并使用指定最大值的Random.nextInt()方法.例如:
private static Random numberGenerator = new Random();
public <T> T randomElement(T[] elements)
return elements[numberGenerator.nextInt(elements.length)];
}
Run Code Online (Sandbox Code Playgroud)
然后可以这样调用:
LightColor randomColor = randomElement(LightColor.values());
Run Code Online (Sandbox Code Playgroud)