我一直在尝试从枚举中提取值并将它们作为字符串存储在数组中。但是,根据变量的不同,这些值必须是唯一的,即相同的值不能使用两次。
我使用以下代码来提取值:
public enum Colour
{
ROOD, GEEL, GROEN, BLAUW, PAARS;
public Colour getRandomColour(Random rn)
{
return values()[rn.nextInt(values().length)];
}
}
但是,这可能会给出重复的值。
看来我的枚举值拒绝放入代码块中。抱歉!
编辑:
for (int i = 0; i < code.length; i++)
code[i] = kleur.getRandomColour(rn).toString();
它填充数组“code”。数组长度取决于几个因素,但它始终小于或等于枚举中的值的数量。
最佳答案
您可以使用 Colour
枚举中的所有值填充列表,随机播放,然后按顺序访问值:
List<Colour> colourList = Arrays.asList(Colour.values());
Collections.shuffle(colourList);
然后,只需迭代列表并按顺序访问颜色,这当然应该是随机的,因为集合被打乱了:
for (Colour c : colourList) {
// do something with c
}
您还可以采用当前的方法,将颜色存储到一个集合中,而不是一个 ArrayList 中。但问题是,您可能会多次绘制重复值,并且随着集合大小的增加,发生这种情况的可能性会增加。
关于java - 如何从枚举中提取元素而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49404647/