正确的逻辑,从卡座中随机选择一张卡,直到选中所有卡

时间:2014-01-29 07:14:59

标签: java math random logic

我在这里需要一些建议。我想创建一个逻辑,一次从一副52张牌中随机选择一张牌,直到所有牌都被选中,如果全部使用了52张牌,我需要重新洗牌并重新开始。

我已经为此创建了一个工作正常的逻辑,但我认为应该有更好的方法来做到这一点。一些MMM - 数学硕士思想可以结束我的痛苦。

这是逻辑:

  1. 创建一个空的arraylist来存储所有52张卡以供检查
  2. 随机选择一张卡片并检查是否存在于arraylist中
  3. 如果是,请重复步骤2
  4. 如果不是,请将卡添加到arraylist
  5. 如果arraylist大小为52,则清空arraylist

    ArrayList<Integer> list = new ArrayList<Integer>();
    int card = -1;
    
    do {
        Random random = new Random();
        card = random.nextInt(52);
    } while (list.contains(card) == true);
    
    // code for drawing the card by the number
    list.add(card);
    
  6. 这个逻辑的唯一问题是当只剩下一张牌时,随机获得该牌的可能性不到2%。系统花了很多时间找到卡。它继续检查while while循环。

    请提出改进​​建议并感谢您的时间。

2 个答案:

答案 0 :(得分:7)

一个选项是以包含所有卡片的完整arraylist开始,然后删除随机索引,直到列表为空,此时您将重新填充它。

示例:

ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<52;i++){
    list.add(i+1);
}
int c = 52;
Random random = new Random();
while(c>0){
    int r = random.nextInt(c--);
    int card = list.get(r);
    list.remove(r);
}
resetList();

答案 1 :(得分:0)

以随机顺序从牌组中拉牌与将牌组洗牌然后从头到尾拉牌相同。因此,您可能会发现Shuffling a deck of cards有帮助。