好的,所以我找了一个答案。我正在使用随机生成器根据用户输入生成数字。然后,这将从中选择一个随机数,并在游戏中为它们指定一个特殊位置。然而问题是我不断得到重复的值,这不是我想要的。那么有人可以帮忙吗?
在
(蓝图类)
int getRoll()
{
roll=rand.nextInt(totalNum);
return roll;
}
(主要课程)
for(numberOfWerewolves=0;numberOfWerewolves!=wolves.werewolfNum;numberOfWerewolves++)
{
playerNumber++;
wolves.getRoll();
System.out.println(wolves.roll);
}
任何人都可以帮助我,非常感谢
答案 0 :(得分:0)
听起来你想在同一范围内有几个随机数,但你不想要任何重复。如果是这样,你想要的就是“洗牌”。使用从1到N(或0到N-1或其他)的数字填充数组,对数组进行混洗,然后开始使用数组开头的数字。
这里给出了改组的良好描述和实现:
答案 1 :(得分:0)
创建一个列表以跟踪以前的随机数,并循环以重新计算随机数,直到它与列表中的任何一个不匹配为止:
public static boolean checkIfExists(ArrayList<Double> list, double x) {
for (double d : list) {
if (d == x) {
return false;
}
}
return true;
}
ArrayList<Double> list = new ArrayList<Double>();
int getRoll()
{
while (true) {
roll = rand.nextInt(totalNum);
if (checkIfExists(list, roll)) {
list.add(roll);
return roll;
}
}
return -100; // -100 means it couldn't generate a number
}
你不应该将while条件保持为true
;你应该修改它,这样它才会循环,直到你确定无法生成一个唯一的数字。