java - 如何从枚举中提取元素而不重复

标签 java enums

我一直在尝试从枚举中提取值并将它们作为字符串存储在数组中。但是,根据变量的不同,这些值必须是唯一的,即相同的值不能使用两次。

我使用以下代码来提取值:

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/

相关文章:

java - Android : load(getClass(). getClassLoader(),classLoadingStrategy) 抛出 java.lang.IllegalStateException

swift - 使用比较运算符扩展 Int 枚举

java - Java 和 C++ 中 for 循环边界检查的编译器/JIT 优化

java - 如何在固定时间间隔后运行 Camel 计时器,但仅在给定的时间范围内

java - 如何在java中的单例(Enum风格)上调用私有(private)方法?

c# - 为什么 'Int32 value__' 显示为枚举成员?

swift - 从枚举的一个子部分中选择一个随机值

java - 为什么 Java 枚举文字不能具有泛型类型参数?

java - 无法从 Azure api 管理中的开发人员门户访问新的 api 服务

java - 如何限制玩家 Activity ?