回答
我建議添加數字到ArrayList<Integer>
,然後使用Collections.shuffle()
隨機化他們的訂單。例如:
ArrayList<Integer> number = new ArrayList<Integer>();
for (int i = 1; i <= 10; ++i) number.add(i);
Collections.shuffle(number);
喜歡它!一個問題,如果我執行兩次或三次Collection.Shuffle它會提供不同的順序? – Yogesh
我很確定它會。我找不到它不應該的原因。很容易檢查,呃? ;) –
列出生成的數字,當您新生成的數字已經在此列表中時,您將創建一個新的隨機數。
Random rng = new Random(); // Ideally just create one instance globally
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < numbersNeeded; i++)
{
while(true)
{
Integer next = rng.nextInt(max) + 1;
if (!generated.contains(next))
{
// Done for this iteration
generated.add(next);
break;
}
}
}
不幸的是,這種方法不能很好地擴展 –
如果只有幾個數字,小於100,我想我的解決辦法是創建一個布爾數組,一旦你得到一個數字,設置數組爲true的位置。我認爲直到所有數字出現都不需要很長時間。希望能幫助到你!
乾杯!
我的兩分錢
public Collection<Integer> getRandomSubset(int max,int count){
if(count > max){
throw new IllegalArgumentException();
}
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0 ; i < count ;i++){
list.add(i);
}
Collections.shuffle(list);
return list.subList(0, count);
}
我喜歡這個解決方案中的'subList()'增強功能 - 非常適合處理一副牌 –
- 1. 隨機數發生器產生重複
- 2. 隨機產生敵人
- 3. 隨機代碼種子生產重複
- 4. 隨機數產生
- 5. 隨機數產生
- 6. 機器人隨機數發生器不夠隨機
- 7. 隨機數發生器沒有重複
- 8. 隨機數發生器不重複
- 9. 非重複隨機數發生器?
- 10. 隨機數發生器產生相同的隨機數
- 11. 隨機種子來產生隨機數
- 12. XNA隨機重生「敵人」
- 13. java隨機發生器不重複
- 14. UUID隨機數的產生
- 15. 必須產生隨機數
- 16. [R data.table:產生隨機數
- 17. CUDA隨機數產生
- 18. Android - 生成非重複的隨機數
- 19. 生成隨機數對,沒有重複
- 20. 隨機數生成沒有重複
- 21. 生成隨機數字而不重複
- 22. 生成非重複的隨機數
- 23. 避免生成重複的隨機數
- 24. 生成沒有重複的隨機數
- 25. Java生成非重複的隨機數
- 26. 隨機數發生器dev /隨機
- 27. 隨機數發生器自動隨機
- 28. 產生重複結果的隨機函數
- 29. 低效代碼:防止產生重複的隨機數
- 30. 產生非重複數的隨機二維陣列,爪哇
它會幫助你:http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates – Thiru