如何在Java中随机列出位于不同包中的枚举值?
如果我有两个类(Character和Person)位于同一个包中,另一个类(Audit)位于Character和Person的不同包中,我如何在Character和Person中随机列出枚举中的值? 在人物课上,如何在Java中随机列出位于不同包中的枚举值?,java,Java,如果我有两个类(Character和Person)位于同一个包中,另一个类(Audit)位于Character和Person的不同包中,我如何在Character和Person中随机列出枚举中的值? 在人物课上, public abstract class Character{ private int age; private BodyType bodyType; public enum BodyType { AVERAGE,
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
看起来您已经非常接近所需的解决方案,尤其是在上述答案的帮助下 下面是一个完整的解决方案,你似乎是在追求什么。基本上,它迭代两个枚举,将每个值的小写名称存储在列表中,洗牌列表,然后构建一个包含其内容的字符串:
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();
}
}