2012-09-15 39 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的电话后随机化,您可以通过迭代他们来获得双打。