如何防止数字重复

时间:2014-02-03 02:27:01

标签: java random repeat

好的,所以我找了一个答案。我正在使用随机生成器根据用户输入生成数字。然后,这将从中选择一个随机数,并在游戏中为它们指定一个特殊位置。然而问题是我不断得到重复的值,这不是我想要的。那么有人可以帮忙吗?

(蓝图类)

int getRoll()
{

    roll=rand.nextInt(totalNum);
    return roll;

}

(主要课程)

for(numberOfWerewolves=0;numberOfWerewolves!=wolves.werewolfNum;numberOfWerewolves++)
{
    playerNumber++;
    wolves.getRoll();
    System.out.println(wolves.roll);

}

任何人都可以帮助我,非常感谢

2 个答案:

答案 0 :(得分:0)

听起来你想在同一范围内有几个随机数,但你不想要任何重复。如果是这样,你想要的就是“洗牌”。使用从1到N(或0到N-1或其他)的数字填充数组,对数组进行混洗,然后开始使用数组开头的数字。

这里给出了改组的良好描述和实现:

https://stackoverflow.com/a/1520212/1441122

答案 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;你应该修改它,这样它才会循环,直到你确定无法生成一个唯一的数字。