停止随机化在 Java 中两次在数组中选取相同的字符串



Code

Random Randomizer = new Random () ;
  cardoneA = suits[Randomizer.nextInt(suits.length)];
  cardoneAv = ranks[Randomizer.nextInt(ranks.length)];

如何阻止随机发生器两次选择相同的牌?例如。如果它选择了某种花色和等级,我怎么能阻止它再次选择它?另外,我怎样才能让它一起选择这两个,以便它可以选择另一张相同价值的卡,只要它是不同的类?

只需模拟一副纸牌,就像在现实生活中所做的那样:

  1. 将所有尚未抽出的牌存储在数组列表中。
  2. 生成一个介于 0 和 ArrayList 当前大小之间的随机数
  3. 取出拾取的卡。阵列的大小现在少了一个。

这种算法也被称为费舍尔-耶茨洗牌。

与其跟踪你选择的卡,不如跟踪你没有选择的卡,并随机化数字以在你没有选择的卡中进行选择。

  1. 使用所有可能的组合初始化列表
  2. 生成一个介于 0 到 (未选择的卡片数 - 1)
  3. 选择卡并从列表中删除卡
  4. 重复步骤 2 和 3,直到您拥有必要数量的卡,或者已选择所有卡。

无法阻止随机发生器多次返回相同的索引。你需要保留一个列表,列出哪些牌 - 花色指数和等级指数的组合 - 已经被选中,并在循环中挑选新的随机索引,循环直到你得到一张你还没有选择的牌。

你想洗牌吗?

如果是这样,单行语句list.add(list.remove(n)); 其中 n 是从 0 到 list.size() - 1 的随机数。重复大约 500 次以获得体面的洗牌。这样做是常见的洗牌;随机取出一张卡片,放在上面。

最新更新