2009-08-08 101 views
3

假設我有一個像1,3,7,9這樣的數組的數組/向量,那麼我需要從這個列表中隨機猜出一個數字。在Java中使用Random類似乎不可能做到這一點。任何人都可以幫助我說出做這種事的方法。我必須更改用於生成隨機數字的數字列表。我正試圖實施一項戰略,自動將戰艦遊戲作爲一項任務。請幫助我做到這一點?如何從給定的數字列表中用Java生成一個隨機數

回答

4

把號碼一個ArrayList和使用Collections.shuffle(arrayList);

+5

爲什麼O(1)滿足O(1)就足夠了? – Tordek 2009-08-08 03:57:17

+0

但在我的情況下,我需要一次多個點擊。通常戰列艦遊戲一個接一個地點擊,這裏它在遊戲初始化時可以改變 – 2009-08-08 07:22:55

18

如果你只是想只能選擇一個隨機數,或想重返選擇多個隨機數(即允許選擇相同數量的多次的可能性),就可以生成一個隨機指數:

List<Integer> lst = ....; 
int index = new Random().nextInt(lst.size()); 
Integer randomeValue = lst.get(index); 

您可以使用數組,而不是爲好。這需要每個選擇O(1)

如果您需要從列表中選擇多個不同的隨機數,然後使用Collections.shuffle()並遍歷列表將是一個更好的解決方案。對於所有查詢,這需要O(n)

+0

謝謝你的迴應。這非常有用 – 2009-08-08 07:24:02

+1

如果您需要多個隨機數,請記住重複使用相同的隨機實例,而不是每次都新建一個。 – 2009-08-08 17:38:11

0

我與tordek關於這一個:不洗牌似乎是一個相當重的方式來從源矢量中選擇配置數量的隨機數字?

對於如何挑選一個隨機數然後再重複n次,難道不會更快地採取msaeed的建議嗎?也許組裝你的隨機值,並繼續選擇,直到你的設置的大小足夠大...(不要忘記某些檢查邊緣條件,其中源矢量中沒有足夠的數字來提供配置的數字隨機值

相關問題