【问题标题】:I am trying to deal a deck of 52 playing cards amongst 4 players equally, meaning they will each have 13 cards each. Can only deal cards 4 each我试图在 4 名玩家之间平均处理 52 张扑克牌,这意味着他们每人将有 13 张牌。每张只能发牌 4 张
【发布时间】:2021-03-05 16:42:45
【问题描述】:

我试图在 4 位玩家之间平均分配一副 52 张扑克牌,这意味着他们每人将有 13 张牌。我似乎每人只能处理 4 张牌,我不知道为什么。任何帮助都会很棒。我还附上了输出的图像: OUTPUT

 public void deals() {
                for (int i = 0; i < 4; i++) {
                    System.out.println("** Player " + (i + 1) + " has been dealt the following cards: **");
                    for (int j = 0; j <4; j++) {
                        //System.out.println(ranks[i + j * 4] + " of " + suits[j]);
                        System.out.println(ranks[i + j] + " of " + suits[j]);

                    }
                }
            }

当我将System.out.println(ranks[i + j * 4] + " of " + suits[j]);中的 4 更改为更大的数字时,我得到一个错误。

【问题讨论】:

  • 您的第一个循环表示 4 个玩家。您的内部循环似乎查看了已发牌。 4x4 是 16。因此您缺少一些卡片。如何发布完整的代码,以便我们为您提供更详细的帮助。
  • 欢迎来到 SO!请避免使用指向图像的链接来引用您的代码或数据。相反,请直接在您的帖子中添加信息。

标签: java adt playing-cards card


【解决方案1】:

您似乎需要先创建(并洗牌)一副牌,然后将牌发给 4 位玩家:

// setup a card deck
List<Card> deck = new ArrayList<>();
for (int i = 0; i < ranks.length; i++) {
    for (int j = 0; j < suits.length; j++) {
        deck.add(new Card(ranks[i], suits[j]));
    }
}
// shuffle
Collections.shuffle(deck);

// deal
int players = 4;
for (int p = 0; p < players; p++) {
    System.out.println("Player " + (p + 1) + " gets these cards:");
    for (int i = 0, n = deck.size() / players; i < n; i++) {
        System.out.println(deck.get(p + players * i));
    }
}

使用 Java 流将卡片呈现为玩家卡片列表的集合可能会很方便:


Collection<List<Card>> playerCards = IntStream
        .range(0, deck.size())  // indexes in range [0..52)
        .boxed()
        // "dealing" cards 1 by 1
        .collect(Collectors.groupingBy(i -> i % players, Collectors.mapping(i -> deck.get(i), Collectors.toList())))
        .values();

// print cards per player        
playerCards
        .stream() // stream of List<Card>
        .map(p ->  p.stream()  // stream of Card of the player
                    .sorted()  // if Card class implements Comparable<Card>
                    .map(Card::toString)
                    .collect(Collectors.joining(" ")) // get player's hand
        )
        .forEach(System.out::println);

样本输出(西装按顺序排序♥ ♦ ♠ ♣):

4♥ J♥ Q♥ K♥ 2♦ 3♦ 6♠ 7♠ 8♠ 10♠ Q♠ A♣ K♣
2♥ 5♦ 6♦ 7♦ 9♦ A♠ 4♠ 9♠ K♠ 2♣ 4♣ 6♣ 10♣
5♥ 6♥ 10♥ 8♦ 2♠ 3♠ J♠ 3♣ 5♣ 7♣ 8♣ 9♣ Q♣
A♥ 3♥ 7♥ 8♥ 9♥ A♦ 4♦ 10♦ J♦ Q♦ K♦ 5♠ J♣

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 2020-02-02
    • 2016-02-24
    • 1970-01-01
    • 2018-05-18
    • 2023-04-02
    • 2014-09-21
    • 2013-05-09
    相关资源
    最近更新 更多