scala.util.Random.nextInt():Int偶尔会返回一个负值吗?

时间:2011-10-16 11:15:00

标签: scala random

scala.util.Random.nextInt (n: Int): Int的文档说“返回伪随机,均匀分布的int值介于0(含)和指定值(独占)...”,而scala.util.Random.nextInt (): Int则表示“返回下一个伪随机数” ,均匀分布的int值...“,没有任何关于零的东西。我偶尔可以得到负值吗?

4 个答案:

答案 0 :(得分:12)

是的,你可以(由于definition均匀分布,这是可以的)。此外,你将在近50%的案例中得到它。

(for(i <- 1 to 100000) yield scala.util.Random.nextInt()).filter(_<0).length

为我提供了49946 - 这非常接近50%。

答案 1 :(得分:10)

显然,是的。它在我第一次尝试时返回负值! : - )

scala> import util.Random
import util.Random

scala> Random.nextInt
res0: Int = -299006430

答案 2 :(得分:9)

正如您所见here(使用Mike Harrah优秀的 sxr ),Scala的Random只委托给基础java.util.Random,后者称为{ {1}}。

正如其他人指出的那样,默认范围介于selfInteger.MIN_VAL之间,换句话说,任何Integer.MAX_VAL都可能,包括否定的。{/ p>

如果只想要正范围,可以使用带参数的重载方法Integer,如下所示:

nextInt

根据文件:

  

返回一个伪随机数,在0之间均匀分布的int值   (包括)和指定值(不包括),由此得出   随机数发生器的序列。

答案 3 :(得分:2)

scala.uti.Random.nextInt():Int利用了与java.util.Random相同的方法。 Luigi指出的范围是[Integer.MIN_VAL,Integer.MAX_VAL]。实际上“均匀分布的int值”意味着可以返回任意数量的int类型,理论上每个类型的概率都是相同的。