所以,我有一個隨機數生成器,它在1和用戶輸入的最大值之間生成10個數字。它運作良好,但我想讓它不會產生重複的數字。因此,如果它生成一個5,其他數字都不能是5.生成唯一隨機數列表
回答
您可以嘗試拒絕採樣。從空集開始。生成一個數字,如果它在集合中,請再試一次。這就是說繼續選擇,直到你找到一個不在集合中的數字。找到新號碼後,將其添加到設置中,然後將其返回給用戶。
當然,如果產生了大量的數字,比如說k和上限是n,那麼得到一個新數字的時間遵循幾何分佈(成功概率(nk)/ n),所以在找到唯一編號之前所需的採樣數量是n /(nk)。
如果您有一個最小值,您可以使用Collection.shuffle()一個唯一值列表。從這裏你可以選擇10個元素。
最大值將隨我所製作的節目而變化。我可以在5到50之間的任何地方。而且,它實際上是隨機選擇字母,我只是讓它在隨機數的位置得到一個字符串的字符。 – user2328462 2013-04-28 08:17:51
範圍必須與您要選擇的數量相同或更大。您不能獲得10個唯一值,其最大範圍小於10。 5. – 2013-04-28 16:55:02
您不是第一個問這個問題的人。有關一般答案,請參閱https://crypto.stackexchange.com/questions/1379/how-to-generate-a-list-of-unique-random-strings。
爲了確保號碼不重複,請將找到的號碼存儲在Java SET中,以便只在內部沒有重複時才添加。
Algorith隨機生成可以是這樣的:
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++;
}
}
在解釋什麼是代碼和控制點時增加幾點。 – Phani 2015-09-14 13:11:14
- 1. 生成(非唯一)隨機列表
- 2. 生成隨機唯一序列號
- 3. 生成唯一的隨機數
- 4. 生成唯一的隨機數
- 5. 關於生成唯一的隨機數
- 6. 生成8位唯一隨機數
- 7. 隨機生成唯一整數C++
- 8. 生成唯一的隨機數字JAVA
- 9. 生成唯一的多個隨機數
- 10. 生成唯一行,列的隨機列表javascript
- 11. 生成一個隨機數得到一個隨機列表項
- 12. 如何生成唯一的隨機列表
- 13. 用數據庫表生成唯一隨機數
- 14. 如何在Haskell中隨機生成一個隨機生成的數字列表
- 15. 隨機和唯一的子集生成
- 16. Laravel:隨機生成的唯一令牌
- 17. 生成唯一隨機顯着顏色?
- 18. 生成隨機,唯一的值C#
- 19. 在oracle中生成6位唯一的隨機數生成器序列
- 20. 如何生成隨機數列表?
- 21. 爲每個數組值生成一個唯一的隨機數
- 22. 生成一組隨機數
- 23. 唯一的隨機整數發生器
- 24. 如何生成一個隨機數,每次都是唯一的
- 25. 在一個範圍內生成'n'唯一的隨機數
- 26. 在Java中生成一組唯一的隨機數
- 27. 在一個範圍內生成'n'個唯一隨機數
- 28. 在固定時間內生成一個唯一的隨機數
- 29. Do循環生成唯一的隨機排列
- 30. 生成隨機上/下字母的唯一5字符序列?
什麼語言是你使用? – 2013-04-28 06:21:08
對不起,錯過了。通常,人們會標記語言而不是將其包含在標題中。 (將爲他編輯) – 2013-04-28 06:21:45
一種解決方案可能是使用Set而不是List。如果它生成一個副本。設置將忽略它,你可以再次生成一個新的號碼。繼續操作,直到設置尺寸未達到極限,即您的情況下有10個數字。 – 2013-04-28 06:23:20