【问题标题】:Randomly select a group of doubles随机选择一组双打
【发布时间】:2012-09-15 01:12:16
【问题描述】:

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

我怎样才能随机选择其中的 10 个,并将每个选择的都设置为另一个 double?

例如假设选择了双“一”,以及其他 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”的双打,例如。 cardone、cardtwo 等。

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

【问题讨论】:

  • 这不是表示卡片的好方法。 double 值可能不准确,尤其是当这些值不能完全表示为 double 时。您是否有理由使用它而不是创建 Card 类?

标签: java random double


【解决方案1】:

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

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

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

【讨论】:

  • 不知道Collections 有一个shuffle 方法。每天学些新东西。 +1
  • 谢谢!我是java新手,这是我读完一本书后的第一个项目。
【解决方案2】:

这是一个非常简单的解决方案:

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 后随机化,您只需遍历它们即可获得双打。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多