如何获得独特的随机int?

时间:2013-09-16 19:39:26

标签: java android random unique

static int n = -1;  
private static int repeatBuffer[] = new int[10];
static {
    repeatBuffer[0] = 0;
    //and more
    repeatBuffer[9] = 9;
}
static public void randomize() {

    do {
        Random r = new Random();
        randomNumber = r.nextInt(20);
    } while (!uniqueInt(randomNumber));
    Log.e(TAG, "" + randomNumber); //here I need have a unique int
}

private static Boolean uniqueInt(int random) {

    for (int i = 0; i < 9; i++) {
        if (random == repeatBuffer[i]) {
            return false;
        }
    }
    if (++n > 9)
        n = 0;
    repeatBuffer[n] = random;
    return true;
}

有时我两次得到同样的int,我想知道问题出在哪里?它甚至可以工作吗?我花了很多时间在这上面,我放弃了。我想我需要在代码中进行一些小调整:)

3 个答案:

答案 0 :(得分:5)

获取随机int的一种更简单的方法是创建一个整数列表List<Integer>,并为其添加您想要的数字。然后使用Collections.shuffle(list);对列表进行混洗。现在从列表的开头开始阅读,每次都会获得一个唯一的随机int。

只需确保每次“读取”列表中的数字时,将其从列表中删除或增加您阅读的位置的索引。

答案 1 :(得分:3)

这是随机数生成器的正常行为,只要数字分布保持一致,生成重复数就是正确的。

如果您需要一组唯一的随机数,您可以在循环内生成它们,并在每次迭代时询问新生成的数字是否存在于生成的数字集中。如果没有,请添加它,如果是,则继续迭代 - 直到该集合具有所需的大小。

答案 2 :(得分:2)

呃,1到20之间的独特随机?第21次运行时会发生什么?

尝试在1到20之间创建一个List的整数。使用Collections.shuffle()来重新排列列表。然后弹出列表前面的第一个项目并使用它。