繁体   English   中英

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

[英]Stop randomize from picking same string in array twice in Java

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

如何阻止随机发生器两次选择相同的纸牌? 例如。 如果它选择了某种西装和等级,如何阻止它再次选择呢? 另外,我如何才能使其同时选择这两个卡,以便它可以选择另一张相同价值的卡,只要它的类别不同?

就像在现实生活中那样模拟一副纸牌:

  1. 将所有尚未绘制的卡存储在ArrayList中。
  2. 生成一个介于0和ArrayList当前大小之间的随机数
  3. 取出被挑选的卡。 现在,数组的大小减小了一个。

该算法也称为Fisher-Yates Shuffle

您不能阻止随机化器多次返回相同的索引。 您需要保留已选择哪些牌的列表(西服指数和等级指数的组合),并循环选择新的随机指数,一直循环直到获得尚未选择的牌。

与其跟踪您尚未选择的卡,不如跟踪您尚未选择的卡,并随机分配数字以在您尚未选择的卡中进行选择。

  1. 用所有可能的组合初始化列表
  2. 产生0到(未选择的卡片数量-1)之间的随机数
  3. 挑选卡并将其从列表中删除
  4. 重复第2步和第3步,直到您有所需数量的卡,或者已选择所有卡。

您是否在尝试洗牌?

如果是这样,则单行语句list.add(list.remove(n)); 其中n是从0到list.size() - 1的随机数。 重复此操作约500次,以得到不错的洗牌效果。 这是一种常见的洗牌; 取出一张随机卡片,放在顶部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM