3

我知道 JAVA Random 类及其用途。但是我想生成一个不应该重复的随机数,直到该范围内的所有数字至少生成一次。谁能给我一些参考..?

在使用 Random 类时,我面临的问题是有些数字重复了 2 或 3 次,而有些则根本没有生成。在这种情况下,我的应用程序可能会失败,因为我有另一个线程根据生成的数字处理一些请求....当出现延迟并且下一个唯一数字不可用时,它会停止而不处理非生成的数字...

4

3 回答 3

13

您可以生成范围内的所有值并将它们打乱。Collections.shuffle() 一旦你使用了每一个值,重复一遍。

想象一下你有一副牌,你拿一副牌,每张牌都有一次,你把它洗牌,你就会知道每张牌随机出现的顺序,只有一次。当一副牌完成后,您再次拿走所有牌并重新洗牌(或新牌组并洗牌)

于 2013-01-13T11:13:24.513 回答
3
  • 创建一个包含范围内所有可能随机数的列表。
  • 不要使用随机数作为结果,而是使用随机整数来选择列表中的索引
  • 将其从列表中删除并返回。

注意将随机整数的范围调整为当前列表大小(每次获得新数字时它会减一)

于 2013-01-13T11:14:25.023 回答
1

您可以随身携带一份已经挑选出的所有数字的列表,并检查新的随机数是否在该列表中 这是一个提出相同问题的人的示例

于 2013-01-13T11:14:31.573 回答