我一直在尝试从枚举中提取值并将它们存储为数组中的String。但是,根据变量,值必须是唯一的,即相同的值不能使用两次。
我使用以下代码来提取值:
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();
它填满了数组'代码'。数组长度取决于几个因素,但它总是小于或等于枚举中的值。
答案 0 :(得分:1)
您可以使用Colour
enum,shuffle中的所有值填充列表,然后按顺序访问值:
List<Colour> colourList = Arrays.asList(Colour.values());
Collections.shuffle(colourList);
然后,只需迭代列表并按顺序访问颜色,当然这应该是随机的,因为集合是洗牌的:
for (Colour c : colourList) {
// do something with c
}
您也可以使用当前的方法,并将颜色存储到一个集合中,而不是存储在ArrayList中。但问题是你可能会多次绘制重复值,并且随着集合大小增加而发生的可能性会增加。
答案 1 :(得分:0)
使用临时列表检查新值是否已存在并继续生成新值,直到找到唯一值。
for (int i = 0; i < code.length; i++) {
String next = kleur.getRandomColour(rn).toString();
List<String> tempList = Arrays.arrayAsList(code);
while (tempList.contains(next);
next = kleur.getRandomColour(rn).toString();
}
code[i] = next;
}
答案 2 :(得分:0)
对于那些仍在疑惑的人,我可能找到了一个很好的解决方案。 将数组的值存储在ArrayList中。使用for循环从ArrayList中提取值,然后删除该索引,从根本上消除重复。