【发布时间】:2014-02-20 20:48:22
【问题描述】:
我在这里需要一些建议。我想创建一个逻辑,从一副牌的 52 张牌中一次随机选择一张牌,直到选择所有牌,如果使用了所有 52 张牌,我需要重新洗牌并重新开始。
我已经为此创建了一个运行良好的逻辑,但我认为应该有更好的方法来做到这一点。一些 MMM - 数学大师可以结束我的痛苦。
逻辑如下:
- 创建一个空数组列表来存储所有 52 张卡片以供检查
- 随机选择一张卡片并检查它是否存在于arraylist中
- 如果是,重复步骤 2
- 如果没有,将卡片添加到数组列表中
-
如果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%。系统正在花费大量时间来查找卡。它不断检查 do while 循环。
请提出改进建议并感谢您抽出宝贵时间。
【问题讨论】:
-
我看不出你的循环是如何结束的。
-
这不是一个非常有效的解决方案,但我真的怀疑系统会花费大量时间来执行此操作。计算机非常非常快。
-
计算机几乎和 Usain Bolt 一样快。
-
@ᴍarounᴍaroun 我觉得这个循环很好,你能指出错误吗