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

Iva*_*van 10 random scala

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

om-*_*nom 12

是的,你可以(由于统一分布的定义,这是可以的).此外,你将在近50%的情况下得到它.

(for(i <- 1 to 100000) yield scala.util.Random.nextInt()).filter(_<0).length
Run Code Online (Sandbox Code Playgroud)

已经屈服于我49946 - 这非常接近50%.

  • @Luigi当随机值等于0时,不要忘记中性情况.因此,将有49,9 ...%的正数百分比,相同数量的负数和一些零. (2认同)

mis*_*tor 10

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

scala> import util.Random
import util.Random

scala> Random.nextInt
res0: Int = -299006430
Run Code Online (Sandbox Code Playgroud)


Pab*_*dez 9

正如你在这里看到的(使用Mike Harrah的优秀sxr),Scala Random只是委托给一个底层java.util.Random,这被称为self.

正如其他人指出的那样,默认范围介于Integer.MIN_VAL和之间Integer.MAX_VAL,换句话说,是任何Integer可能的,包括负面的.

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

Random.nextInt(Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)

根据文件:

返回从此随机数生成器的序列中提取的伪随机,均匀分布的int值,介于0(包括)和指定值(不包括)之间.