[英]Randomly select a group of doubles
我有一個雙打列表,為了這個目的,我可以說我有一個,兩個,三個,四個,五個,六個,七個等等的雙打......到100.每個都設置為一個值。 (這些值與名稱不對應)。
如何隨機選擇其中的10個,並將每個選定的設置為另一個?
EG說選擇雙“一”,以及另外9個。
我還想將雙“blah”設置為所選雙精度值。 然后我想將雙“blahtwo”設置為下一個選定的double的值,等等...
我不想隨機選擇兩次相同的雙倍。
示例代碼:
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;
所以我想隨機選擇其中十個雙打,其名稱為“card”,例如。 cardone,cardtwo等
我想要名為“跑”的雙打,例如。 “ranone”“rantwo”等...被設置為與十個選定的雙打相同。
我使用Collection of Double,比如說ArrayList<Double>
而不是double數組,然后在ArrayList上調用Collections.shuffle(myArrayList)
。 賓果,隨機。 要獲得其中的10個值,只需在列表上調用remove(0)
(在檢查后確保大小不為0)。
這與洗牌和選擇10張隨機牌並沒有太大區別。
編輯
我沒有意識到你實際上是在試圖模擬撲克牌。 如果是這種情況,那么請停止你正在做的事情並忘記使用雙打。 而是學習和使用枚舉,因為撲克牌幾乎是枚舉有用的最純粹的例子。 可以在此處找到描述所有這些內容的優秀鏈接。
這是一個非常簡單的解決方案:
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
之后,列表將被隨機化,你可以迭代它們來獲得雙打。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.