使用if语句来处理卡片

时间:2016-10-08 16:06:45

标签: java if-statement while-loop

我正在尝试向玩家交付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循环可能会更好,但仅仅是为了学习我在这里做错了什么。

1 个答案:

答案 0 :(得分:0)

无论您在循环体内遇到for的频率如何,您的null循环始终执行五次。您可以通过将deck的大小设置为< 5来验证这一点。如果你的方法工作正确,它应该陷入无限循环。相反,您将获得至少5 - deck.size多个null s。快速和快速如果遇到l

,脏修复将会减少null
if (deck[index] != null) {
    // ...
} else /* if (deck[index] == null) */ {
    --l;
}

我会推荐一个完全不同的策略。您可以预先确定所有卡片的顺序,而不是每次想要绘制卡片时生成随机索引。使用Fisher-Yates-Shuffle。这样,您只需要记住绘制了多少张牌并从阵列/列表/队列中提取下一张牌。