2012-09-15 44 views
1

我有一個雙打的列表,爲了這個目的可以說我有雙打命名一,二,三,四,五,六,七等......通過100.每一個被設置爲一個值。 (這些值不符合名稱)。隨機選擇一組雙打

我該如何隨機選擇其中的10個,並將每個選定的設置爲另一個雙倍?

E.G.說雙「一」被選中,以及其他9人。

我想也設置雙「blah」爲所選雙的值。然後我想設置雙「blahtwo」到下一個選定的雙倍的值,等等...

我不想隨機選擇相同的雙倍。

示例代碼:

double cardone, cardtwo, cardthree, cardfour, cardfive, cardsix, cardseven, cardeight, cardnine, cardten, cardeleven, cardtwelve, cardthirteen, cardfourteen, cardfifteen, cardsixteen, cardseventeen, cardeighteen, cardnineteen, cardtwenty; 

double ran, ranone, rantwo, ranthree, ranfour, ranfive, ransix, ranseven, raneight, rannine, ranten; 

cardone = 1.01; 
     cardtwo = 1.02; 
     cardthree = 1.03; 
     cardfour = 1.04; 
     cardfive = 1.05; 
     cardsix = 1.06; 
     cardseven = 1.07; 
     cardeight = 1.08; 
     cardnine = 1.09; 
     cardten = 1.1; 
     cardeleven = 1.11; 
     cardtwelve = 1.12; 
     cardthirteen = 1.13; 
     cardfourteen = 2.01; 
     cardfifteen = 2.02; 
     cardsixteen = 2.03; 
     cardseventeen = 2.04; 
     cardeighteen = 2.05; 
     cardnineteen = 2.06; 
     cardtwenty = 2.07; 

所以我想隨機選擇與他們的名字「卡」,如雙打十。 cardone,cardtwo等

我想要雙打名爲「跑」例如。 「ranone」,「rantwo」等等被設置爲與十個選中的雙打相同。

+1

這不是一個很好的方式來表示卡。 'double'值可能不準確,特別是當值不能完全表示爲'double'時。是否有一個原因,而不是創建一個「卡」類? – Brian

+0

請參閱編輯以回答。 –

回答

2

我會使用一個Double的集合,比如說一個ArrayList<Double>而不是一個double數組,然後在ArrayList上調用Collections.shuffle(myArrayList)。賓果,隨機。要獲得這些值中的10個,只需在列表中調用remove(0)(檢查後確保大小不爲0)。

這與洗牌和選擇10張隨機卡沒什麼兩樣。

編輯
我不知道你實際上是試圖打牌建模。如果是這樣,那麼請停止你正在做的事,忘記使用雙打。相反,要學習和使用枚舉,因爲撲克牌幾乎就是枚舉最適合的最純粹的例子。描述所有這些的優秀鏈接可以在here找到。

+1

不知道'Collections'有一個'shuffle'方法。每天學些新東西。 +1 – Brian

+0

謝謝!我是java新手,這是我閱讀完本書後的第一個項目。 – User093203920

1

這裏是一個非常簡單的解決方案:

List<Double> doubles = new ArrayList<Double>(); 
// Add all 100 of your doubles 
shuffle(doubles); 

然後shuffle是通用的,可以與任何列表工作:

private static <T> void shuffle(List<T> list) { 
    int size = list.size(); 
    Random rand = new Random(); 
    for (int i = 0; i < size) { 
     list.add(list.remove(rand.nextInt(size - i))); 
    } 
} 

這將選擇一個隨機的,還未選擇的值,並將其放置在列表的結尾。如果你想要更好的解釋,就這麼說吧。該名單將在shuffle的電話後隨機化,您可以通過迭代他們來獲得雙打。