加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:17:28 所属栏目:Java 来源:网络整理
导读:我在这里需要一些建议.我想创建一个逻辑,从一副52张牌中随机选择一张牌,直到选中所有牌,如果使用了所有52张牌,我需要重新洗牌并重新开始. 我已经为此创建了一个工作正常的逻辑,但我认为应该有更好的方法来做到这一点.一些MMM – 数学硕士思想可以结束我的痛
我在这里需要一些建议.我想创建一个逻辑,从一副52张牌中随机选择一张牌,直到选中所有牌,如果使用了所有52张牌,我需要重新洗牌并重新开始.

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

这是逻辑:

>创建一个空的arraylist来存储所有52张卡以供检查
>随机选择一张卡片,检查是否存在于arraylist中
>如果是,请重复步骤2
>如果不是,请将卡添加到arraylist
>如果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);

这个逻辑的唯一问题是当只剩下一张卡时,随机获得该卡的可能性不到2%.系统花了很多时间找到卡.它继续检查while while循环.
请提出改进??建议并感谢您的时间.

解决方法

一种选择是以包含所有卡的完整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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读