gpt4 book ai didi

java - 使用if语句发牌

转载 作者:太空宇宙 更新时间:2023-11-04 12:10:13 26 4
gpt4 key购买 nike

我正在尝试向玩家发 x 数量的牌,具体取决于他们手中已有的牌数(最多 5 张)。但为了确保您不会两次收到同一张牌,或者收到一张已经打过的牌,我使用了 if 语句。

Card[] hand = new Card[5];
public void dealCard() {
int cardCount = 0;
Random ran = new Random();

if (cardCount < 5) {
int times = 5 - cardCount;
for (int l = 0; l < times; l++) {
int index = ran.nextInt(deck.length);
if (deck[index] != null) {
hand[cardCount] = deck[index];
deck[index] = null;
cardCount++;
}
}
}
}

一开始似乎有效,但最后一张卡(而且总是最后一张卡)经常是空的。有人告诉我,使用 while 循环可能会更好,但只是为了了解我在这里做错了什么。

最佳答案

您的for循环总是执行五次,无论您多久遇到 null在循环体内。您可以通过操作 deck 的大小来验证这一点某事< 5 。如果你的方法工作正常,它应该陷入无限循环。相反,你至少会得到 5 - deck.size许多null s。一个快速而肮脏的解决方法是递减 l如果您遇到 null :

if (deck[index] != null) {
// ...
} else /* if (deck[index] == null) */ {
--l;
}

我会推荐一种不同的策略。您可以预先确定所有卡片的顺序,而不是每次想要抽牌时都生成随机索引,例如与 Fisher-Yates-Shuffle 。这样,您只需要记住抽了多少张牌,然后从数组/列表/队列中提取下一张牌。

关于java - 使用if语句发牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39934490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com