scala.util.Random.nextInt (n: Int): Int
的文档说“返回伪随机,均匀分布的int值介于0(含)和指定值(独占)...”,而scala.util.Random.nextInt (): Int
则表示“返回下一个伪随机数” ,均匀分布的int值...“,没有任何关于零的东西。我偶尔可以得到负值吗?
答案 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}}。
正如其他人指出的那样,默认范围介于self
和Integer.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类型,理论上每个类型的概率都是相同的。