【问题标题】:How to get unique random int?如何获得唯一的随机整数?
【发布时间】:2013-09-16 19:39:25
【问题描述】:
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 两次,我想知道问题出在哪里?它甚至可以工作吗?我花了很多时间在这上面,我放弃了。我想我需要对代码进行一些小的调整:)

【问题讨论】:

    标签: java android random unique


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我以前从未使用过。我一直在使用 Random r = new Random(); :) 列表和集合更加友好和容易。 :)
    【解决方案2】:

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

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

    【讨论】:

    • 我认为这就是 OP 实际上想要做的。他们只是搞砸了实施。
    【解决方案3】:

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

    尝试将 1 到 20 之间的整数设为 List。使用 Collections.shuffle() 随机排列列表。然后从列表的前面弹出第一个项目并使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2010-11-02
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多