1

我有一个双打列表,为此,假设我有一个双打,命名为一、二、三、四、五、六、七等……到 100。每个都设置为一个值。(这些值与名称不对应)。

我如何随机选择其中的 10 个,并将每个选定的设置为另一个双倍?

EG 说选择了双“一”,以及其他 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;

所以我想随机选择十个名字为“card”的双打,例如。卡多内、卡二等

我想要名为“跑”的双打,例如。“ranone”“rantwo”等...设置为与十个选定的双打相同。

4

2 回答 2

2

我会使用一个 Double 的集合,比如一个ArrayList<Double>而不是一个 double 数组,然后调用Collections.shuffle(myArrayList)ArrayList。宾果游戏,随机。要获得其中的 10 个值,只需调用remove(0)列表(在检查以确保大小不为 0 之后)。

这与洗一副牌并随机选择 10 张牌没有太大区别。

编辑
我没有意识到您实际上是在尝试模拟扑克牌。如果是这种情况,那么请停止你正在做的事情并忘记使用双打。取而代之的是学习和使用枚举,因为纸牌几乎是枚举有用的最纯粹的例子。可以在此处找到描述所有这些的出色链接。

于 2012-09-15T01:32:03.197 回答
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,您可以遍历它们以获得双打。

于 2012-09-15T01:35:58.330 回答