Scala随机数生成器不在范围之间产生唯一的随机数

时间:2019-05-06 00:07:39

标签: scala random

我有以下代码来生成新的随机数

val start = 1
val end = 50000000
val rnd = new scala.util.Random

for (i < 1 to 25000000){
  val rnum = start + rnd.nextInt((end - start) + 1)

...
}

但这会不时产生重复的随机数。这是错误还是我做了一些愚蠢的事情?

2 个答案:

答案 0 :(得分:5)

不用担心,这不是bug,您也没有做任何愚蠢的事情。但是,您错过了随机数序列可以包含重复项的事实。

原因在注释中说明。

问题在于人类对随机数没有很好的本能理解。如果您要求人们写一系列数字,即使出现这种情况的可能性为10%,他们也不大可能重复一个数字。如果您要求人们写下5个随机数字,即使这应该在70%的情况下发生,他们也不太可能两次使用相同的数字。

答案 1 :(得分:0)

没有错误。它随机选择,因此有机会选择相同的元素。 我更喜欢使用List的随机播放功能。

val list = (1 to 100).toList

scala.util.Random.shuffle(list).take(1)

但是创建一个大数字列表将不是一个有效的解决方案。您可以使用以下方式生成随机数。

val seed = new java.util.Date().hashCode
val rand = new scala.util.Random(seed)
val someNum = rand.nextInt