我有两个可以分配给我的程序中的参与者的组,这些组在枚举中表示为" RG"和" NP"。我想随机分配这些组。有没有办法在java中这样做?
例如,当我随机生成参与者的ID(我目前正在写一个文件)时,我这样做了:
Random rndbid = new Random();
int msDBID = 10 + rndbid.nextInt(90);
stringB.append(String.valueOf(msDBID));
stringB.append("\t");
是否有类似的东西,这将使我能够做同样的事情,但不是随机生成一个int,它会随机生成一个" RG"或" NP"?
如果您需要澄清,请告诉我。提前致谢!
编辑:我是Java的新手,所以请尽量解释!我正在学习。谢谢!答案 0 :(得分:5)
您可以在枚举中创建静态方法以生成随机实例。如果您决定添加更多枚举值,则会缩放。
public enum MyEnum {
RG,
NP;
public static MyEnum getRandom(Random random) {
MyEnum[] allMyEnums = MyEnum.values();
int randomEnumIndex = random.nextInt(allMyEnums.length);
return allMyEnums[randomEnumIndex];
}
}
既然你提到你是Java的新手,那么这是一个基本的纲要。在Java中,enum
可以有与之关联的方法。在这种情况下,我添加了一个静态方法(称为MyEnum.getRandom(random)
)。这种方法不必是枚举的一部分,但它可能很方便。
枚举的.values()
方法将按顺序返回包含所有枚举值的数组。我把它放在变量allMyEnums
中。因此,allMyEnums[x]
将返回第x个索引枚举。在这种情况下,allMyEnums[0]
将是RG,allMyEnums[1]
将是NP。在allMyEnums
内,我返回一个介于0和值之间的随机整数(数组长度)。这将最终随机选择一个枚举。
答案 1 :(得分:3)
使用random.nextInt()
从枚举值中进行选择。
Random r = new Random();
Group group = Groups.values()[r.nextInt(Groups.values().length];
答案 2 :(得分:1)
您可以使用此方法:
public String flip(){
Random randomNum = new Random();
int result = randomNum.nextInt(2);
if(result == 0){
return "RG";
} else {
return "NP";
}
}
答案 3 :(得分:0)
生成一个0或1的int。将0映射到RG,将1映射到NP。问题解决了。
答案 4 :(得分:0)
您可以使用Random
仅生成0
或1
,然后使用它生成一个字符串或另一个字符串:
rndbid.nextInt(2) == 0 ? "RG" : "NP"; // original answer
rndbid.nextBoolean() ? "RG" : "NP"; // even better