簡體   English   中英

生成唯一的隨機數列表

[英]Generate a List of Unique Random Numbers

因此,我有一個隨機數生成器,它會生成1到用戶輸入的最大值之間的10個數字。 效果很好,但我想制作它,以免產生重復的數字。 因此,如果生成5,則其他任何數字都不能為5。

您可以嘗試剔除采樣。 從一個空集開始。 生成一個數字(如果它在集合中),請重試。 也就是說,繼續選擇直到找到不在集合中的數字。 找到新號碼后,將其添加到集合中,然后將其返回給用戶。

當然,如果生成了大量數字,例如k,上限為n,那么獲取新數字的時間將遵循幾何分布(成功概率(nk)/ n),因此預期的采樣數找到唯一編號之前需要的編號是n /(nk)。

如果最大值很小,則可以使用Collection.shuffle()唯一值列表。 從中可以選擇10個元素。

您不是第一個提出這個問題的人。 有關一般答案,請參見https://crypto.stackexchange.com/questions/1379/how-to-generate-a-list-of-unique-random-strings

為了確保該數字不是重復的,請將找到的數字存儲在Java SET中,以便僅在其中沒有重復的情況下才添加。

用於隨機生成的算法可以是:

take the system time as your seed value 
use this to get the random numbers
suppose user says number between 1-100
so take system milliseconds%100 so time always  changes so maximum probability that you get random numbers.

因此,在這種情況下,始終將種子值mod(%)的上限設為100。

int i = 0, r = 0;
    boolean ch = true;
    int[] list = new int[num];
    while (i < num)
    {
        r = rnd.nextInt(num);
        ch = true;
        for (int j = 0; j < i; j++)
            if (r == list[j])
            {
                ch = false;
                break;
            }
        if (ch)
        {
            list[i] = r;
            i++;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM