[英]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.