0
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,我想知道问题出在哪里?它甚至可以工作吗?我花了很多时间在这上面,我放弃了。我想我需要对代码进行一些小的调整:)

4

3 回答 3

5

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

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

于 2013-09-16T19:42:04.960 回答
3

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

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

于 2013-09-16T19:41:51.743 回答
2

呃,1到20之间的唯一随机数?当它运行第 21 次时会发生什么?

尝试制作List1 到 20 之间的整数。Collections.shuffle()用于随机播放列表。然后从列表的前面弹出第一个项目并使用它。

于 2013-09-16T19:42:47.387 回答