如何在Java中随机列出位于不同包中的枚举值?

如何在Java中随机列出位于不同包中的枚举值?,java,Java,如果我有两个类(Character和Person)位于同一个包中,另一个类(Audit)位于Character和Person的不同包中,我如何在Character和Person中随机列出枚举中的值? 在人物课上, public abstract class Character{ private int age; private BodyType bodyType; public enum BodyType { AVERAGE,

如果我有两个类(Character和Person)位于同一个包中,另一个类(Audit)位于Character和Person的不同包中,我如何在Character和Person中随机列出枚举中的值? 在人物课上,

public abstract class Character{

    private int age;
    private BodyType bodyType;

    public enum BodyType
    {
        AVERAGE,
        ATHELETIC,
        UNSPECIFIED;

    }
    public Character(int age, BodyType bodyType){
        this.age = age;
        this.bodyType = bodyType;
    }

    public int getAge(){
        return this.age;
    }
    public BodyType getBodyType(){
        return this.bodyType;
    }

    public void setAge(int age){
        this.age = age;
    }
    public void setBodyType(BodyType bodyType){
        this.bodyType = bodyType;
    }

}
在Person类中,它扩展了Character

public class Person extends Character{


    private AgeCategory ageCategory;

    public enum AgeCategory
    {
        CHILD,
        ADULT;
    }
    public Person(int age, BodyType bodyType){

        super(age, bodyType);
    }
    public AgeCategory getAgeCategory()
    {
        if (getAge() >=0 && getAge() <=16){
            return AgeCategory.CHILD;
        }

        if (getAge() >=17){
            return AgeCategory.ADULT;
        }
        return ageCategory;
    }

}
这就是我们的行为

迭代器方法返回的迭代器按元素的自然顺序(声明枚举常量的顺序)遍历元素

试一试

List randomType=Arrays.asList(BodyType.values());
集合。随机(随机类型);
对于(BodyType:randomType){
系统输出打印项次(类型);
}
要在注释中实现该[
-混合所有枚举类型
]:

您的枚举应该共享公共类型并使用shuffle

  • 迭代BodyType的枚举并存储在列表中
  • 迭代AgeType的枚举并存储在同一列表中
  • 洗牌
  • 印刷品

  • 看起来您已经非常接近所需的解决方案,尤其是在上述答案的帮助下

    下面是一个完整的解决方案,你似乎是在追求什么。基本上,它迭代两个枚举,将每个值的小写名称存储在列表中,洗牌列表,然后构建一个包含其内容的字符串:

    public class Audit {
    
        public String toString() 
        {   
            List<String> names = new ArrayList<>();
            for (BodyType bodyType : BodyType.values())
            {
                names.add(bodyType.name().toLowerCase());
            }
    
            for (AgeCategory ageCategory : AgeCategory.values())
            {
                names.add(ageCategory.name().toLowerCase());
            }
    
            Collections.shuffle(names);
    
            StringBuilder sb = new StringBuilder("random enumeration\n");
            for (String name : names) {
                sb.append(name).append(":\n");
            }
    
            return sb.toString();
        }
    
    }
    
    公共类审计{
    公共字符串toString()
    {   
    列表名称=新的ArrayList();
    对于(BodyType BodyType:BodyType.values())
    {
    name.add(bodyType.name().toLowerCase());
    }
    对于(AgeCategory AgeCategory:AgeCategory.values())
    {
    name.add(ageCategory.name().toLowerCase());
    }
    集合。洗牌(名称);
    StringBuilder sb=新StringBuilder(“随机枚举”);
    for(字符串名称:名称){
    sb.append(name.append(“:\n”);
    }
    使某人返回字符串();
    }
    }
    
    请注意,我已经改变了生成字符串的方式,使用
    StringBuilder
    会大大提高效率


    此外,我真的不明白你为什么需要你所要求的,但我假设你有你的理由。

    你有机会检查答案吗?是的,但结果是,但我想要一个类似的输出。检查我的编辑。但是你为什么要这样做呢?如果下面的答案有帮助,你能批准吗?
    List<BodyType> randomType = Arrays.asList(BodyType.values());
    Collections.shuffle(randomType);
    for (BodyType type : randomType) {
        System.out.println(type);
    }
    
    public class Audit {
    
        public String toString() 
        {   
            List<String> names = new ArrayList<>();
            for (BodyType bodyType : BodyType.values())
            {
                names.add(bodyType.name().toLowerCase());
            }
    
            for (AgeCategory ageCategory : AgeCategory.values())
            {
                names.add(ageCategory.name().toLowerCase());
            }
    
            Collections.shuffle(names);
    
            StringBuilder sb = new StringBuilder("random enumeration\n");
            for (String name : names) {
                sb.append(name).append(":\n");
            }
    
            return sb.toString();
        }
    
    }