我试图在 4 名玩家之间平均处理 52 张扑克牌,这意味着他们每人将有 13 张牌。每张只能发牌 4 张
Posted
技术标签:
【中文标题】我试图在 4 名玩家之间平均处理 52 张扑克牌,这意味着他们每人将有 13 张牌。每张只能发牌 4 张【英文标题】: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 【发布时间】: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!请避免使用指向图像的链接来引用您的代码或数据。相反,请直接在您的帖子中添加信息。 【参考方案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♣
【讨论】:
以上是关于我试图在 4 名玩家之间平均处理 52 张扑克牌,这意味着他们每人将有 13 张牌。每张只能发牌 4 张的主要内容,如果未能解决你的问题,请参考以下文章