【问题标题】:Problem with my shuffle method in Elevens我在 Elevens 中的随机播放方法有问题
【发布时间】:2021-08-05 23:25:39
【问题描述】:

我有一个学校作业,我必须使用 ArrayLists 制作 Elevens 纸牌游戏。我最近才知道它们是如何工作的,所以我不是最好的。我遇到的唯一问题是我的洗牌方法。代码如下:

public void shuffle()
{ 
    while (dealt.size() > 0)
    {
        Card temp = dealt.remove(0);
        undealt.add(temp);
    }

    while (dealt.size() > 0)
    {
        for (int i = 0; i < 100; i++)
        {
            int random = (int) Math.floor(Math.random() * undealt.size());
            Card temp = undealt.remove(random);
            undealt.add(undealt.size(), temp);
        }
    }
}

您可能需要参考的代码:

public Deck(String[] ranks, String[] suits, int[] values)
{
    undealt = new ArrayList<Card>();
    dealt = new ArrayList<Card>();
    for (int i = 0; i < ranks.length; i++)
    {
        for (int j = 0; j < suits.length; j++)
        {
            Card c = new Card(ranks[i], suits[j], values[i]);
            undealt.add(c);
        }
    }
    shuffle();
}

有人有什么建议吗?谢谢!

【问题讨论】:

  • 为什么不使用 Collections.shuffle()?
  • 您的代码中有很多错误。 shuffle 方法中的第二个循环无法处理任何内容,因为它的条件 dealt.size() &gt; 0 是不可行的 - 您之前在第一个循环中清空了 dealt arraylist。尝试自己解决这些问题,您将获得进一步的帮助。
  • @bimjhi 对不起,我对 Java 很陌生,所以没有意识到这是一个问题。如果我是,我就不会发帖了。

标签: java for-loop arraylist methods shuffle


【解决方案1】:

你可以把 shuffle 方法写得这么短:

public void shuffle() {
    undealt.addAll(dealt);
    dealt.clear();
    Collections.shuffle(undealt);
}

如果你想继续你的方法,那么你需要在 shuffle 方法的第二部分中删除不必要的循环。

public void shuffle() {
    while (dealt.size() > 0) {
        Card temp = dealt.remove(0);
        undealt.add(temp);
    }
    for (int i = 0; i < 100; i++) {
        int random = (int) Math.floor(Math.random() * undealt.size());
        Card temp = undealt.remove(random);
        undealt.add(undealt.size(), temp);
    }
}

【讨论】:

    【解决方案2】:

    你可以使用Collections.shuffle():

    public void shuffle() {
        while (dealt.size() > 0)
        {
            Card temp = dealt.remove(0);
            undealt.add(temp);
        }
    
        Collections.shuffle(undealt); // instead of the second loop
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2013-12-27
      • 2021-09-02
      • 2023-01-23
      相关资源
      最近更新 更多