Может ли scala.util.Random.nextInt (): Int иногда возвращать отрицательное значение? - PullRequest
9 голосов
/ 16 октября 2011

Документация для scala.util.Random.nextInt (n: Int): Int говорит: «Возвращает псевдослучайное, равномерно распределенное значение типа int между 0 (включительно) и указанным значением (исключая) ...», в то время как для scala.util.Random.nextInt (): Int это говорит «Возвращает следующее псевдослучайное, равномерно распределенное значение intзначение ... ", не говоря ничего о нуле.Могу ли я иногда получить отрицательное значение здесь?

Ответы [ 4 ]

12 голосов
/ 16 октября 2011

Да, вы можете (и это нормально из-за определения равномерного распределения). Более того, вы получите его почти в 50% случаев.

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

дали мне 49946 - это довольно близко к 50%.

10 голосов
/ 16 октября 2011

Видимо, да.Он вернул отрицательное значение с моей первой попытки!: -)

scala> import util.Random
import util.Random

scala> Random.nextInt
res0: Int = -299006430
9 голосов
/ 16 октября 2011

Как вы можете видеть здесь (используя превосходные sxr Майка Харры), Random Scala просто делегирует базовый java.util.Random, который упоминается как self.

Как отмечали другие, диапазон по умолчанию составляет от Integer.MIN_VAL до Integer.MAX_VAL, другими словами, возможен любой Integer, включая отрицательные.

Если вы хотите только положительноедиапазон, вы можете использовать перегруженный метод nextInt, который принимает аргумент, например:

Random.nextInt(Integer.MAX_VALUE);

Согласно документации:

Возвращает псевдослучайное, равномерно распределенное значение типа intмежду 0 (включительно) и указанным значением (исключая), взятым из последовательности этого генератора случайных чисел.

2 голосов
/ 16 октября 2011

scala.uti.Random.nextInt (): Int использует тот же метод java.util.Random. И диапазон, на который указал Луиджи, - [Integer.MIN_VAL, Integer.MAX_VAL]. На самом деле «равномерно распределенное значение int» означает, что любое число типа int можно вернуть, и вероятность каждого из них в теории одинакова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...