Spec-Zone.ru › OpenJDK 25

Класс Random

java.lang.Object
java.util.Random
Все реализованные интерфейсы:
Serializable, RandomGenerator
Прямые известные подклассы:
SecureRandom, ThreadLocalRandom
public class Random extends Object implements RandomGenerator, Serializable
Экземпляр этого класса используется для генерации последовательности псевдослучайных чисел; её период составляет всего 248. Класс использует 48-битное начальное значение, которое изменяется с помощью линейной конгруэнтной формулы. (См. Donald E. Knuth, The Art of Computer Programming, Volume 2, Third edition: Seminumerical Algorithms, раздел 3.2.1.)

Если два экземпляра Random созданы с одним и тем же начальным значением и для каждого из них выполнена одна и та же последовательность вызовов методов, они сгенерируют и вернут идентичные последовательности чисел. Чтобы гарантировать это свойство, для класса Random заданы определённые алгоритмы. Для абсолютной переносимости кода Java реализации Java должны использовать все приведённые здесь алгоритмы для класса Random. Однако подклассам класса Random разрешено использовать другие алгоритмы, если они соответствуют общим контрактам всех методов.

Алгоритмы, реализованные в классе Random, используют служебный метод protected, который при каждом вызове может предоставлять до 32 псевдослучайно сгенерированных битов.

Для многих приложений проще использовать метод Math.random().

Экземпляры java.util.Random являются потокобезопасными. Однако одновременное использование одного и того же экземпляра java.util.Random в нескольких потоках может привести к конкуренции за ресурсы и, как следствие, к снижению производительности. Для многопоточных приложений рассмотрите возможность использования ThreadLocalRandom.

Экземпляры java.util.Random не являются криптографически стойкими. Для приложений, чувствительных к безопасности, рассмотрите возможность использования SecureRandom, чтобы получить криптографически стойкий генератор псевдослучайных чисел.

Начиная с версии:
1.0
См. также:
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе RandomGenerator

RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator

Краткое описание конструкторов

Конструктор Описание
Random()
Создаёт новый генератор случайных чисел.
Random(long seed)
Создаёт новый генератор случайных чисел, используя единственное начальное значение long.

Краткое описание методов

Модификатор и тип Метод Описание
DoubleStream doubles()
Возвращает практически неограниченную последовательность псевдослучайных значений double, каждое из которых находится в диапазоне от нуля (включительно) до единицы (не включая её).
DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
Возвращает практически неограниченную последовательность псевдослучайных значений double, каждое из которых соответствует заданным началу диапазона (включительно) и его верхней границе (не включая её).
DoubleStream doubles(long streamSize)
Возвращает последовательность, содержащую заданное количество streamSize псевдослучайных значений double, каждое из которых находится в диапазоне от нуля (включительно) до единицы (не включая её).
DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
Возвращает последовательность, содержащую заданное количество streamSize псевдослучайных значений double, каждое из которых соответствует заданным началу диапазона (включительно) и его верхней границе (не включая её).
static Random from(RandomGenerator generator)
Возвращает экземпляр Random, который делегирует вызовы методов аргументу RandomGenerator.
IntStream ints()
Возвращает практически неограниченную последовательность псевдослучайных значений int.
IntStream ints(int randomNumberOrigin, int randomNumberBound)
Возвращает практически неограниченную последовательность псевдослучайных значений int, каждое из которых соответствует заданным началу диапазона (включительно) и его верхней границе (не включая её).
IntStream ints(long streamSize)
Возвращает последовательность, содержащую заданное количество streamSize псевдослучайных значений int.
IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
Возвращает последовательность, содержащую заданное количество streamSize псевдослучайных значений int, каждое из которых соответствует заданным началу диапазона (включительно) и его верхней границе (не включая её).
LongStream longs()
Возвращает практически неограниченную последовательность псевдослучайных значений long.
LongStream longs(long streamSize)
Возвращает последовательность, содержащую заданное количество streamSize псевдослучайных значений long.
LongStream longs(long randomNumberOrigin, long randomNumberBound)
Возвращает практически неограниченную последовательность псевдослучайных значений long, каждое из которых соответствует заданным началу диапазона (включительно) и его верхней границе (не включая её).
LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
Возвращает последовательность, содержащую заданное количество streamSize псевдослучайных значений long, каждое из которых соответствует заданным началу диапазона (включительно) и его верхней границе (не включая её).
protected int next(int bits)
Генерирует следующее псевдослучайное число.
boolean nextBoolean()
Возвращает следующее псевдослучайное равномерно распределённое значение boolean из последовательности этого генератора случайных чисел.
void nextBytes(byte[] bytes)
Генерирует случайные байты и помещает их в предоставленный пользователем массив байтов.
double nextDouble()
Возвращает следующее псевдослучайное равномерно распределённое значение double между 0.0 и 1.0 из последовательности этого генератора случайных чисел.
float nextFloat()
Возвращает следующее псевдослучайное равномерно распределённое значение float между 0.0 и 1.0 из последовательности этого генератора случайных чисел.
double nextGaussian()
Возвращает следующее псевдослучайное значение double с гауссовым («нормальным») распределением, средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора случайных чисел.
int nextInt()
Возвращает следующее псевдослучайное равномерно распределённое значение int из последовательности этого генератора случайных чисел.
int nextInt(int bound)
Возвращает псевдослучайное равномерно распределённое значение int от 0 (включительно) до указанного значения (не включая его), выбранное из последовательности этого генератора случайных чисел.
long nextLong()
Возвращает следующее псевдослучайное равномерно распределённое значение long из последовательности этого генератора случайных чисел.
void setSeed(long seed)
Устанавливает или обновляет начальное значение этого генератора случайных чисел, используя предоставленное значение начального значения long (необязательная операция).

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе RandomGenerator

equiDoubles, isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong

Подробное описание конструкторов

Random

public Random()
Создает новый генератор случайных чисел. Этот конструктор задает начальное значение генератора случайных чисел, которое с высокой вероятностью будет отличаться от значения, заданного при любом другом вызове этого конструктора.

Random

public Random(long seed)
Создает новый генератор случайных чисел с использованием начального значения типа long. Начальное значение — это исходное значение внутреннего состояния генератора псевдослучайных чисел, которое поддерживается методом next(int).
Требования к реализации:
Вызов new Random(seed) эквивалентен следующему:
Random rnd = new Random();
rnd.setSeed(seed);
Параметры:
seed — начальное значение
См. также:
  • setSeed(long)

Подробное описание методов

from

public static Random from(RandomGenerator generator)
Возвращает экземпляр Random, который делегирует вызовы методов аргументу RandomGenerator. Если генератор является экземпляром Random, он возвращается без изменений. В противном случае этот метод возвращает экземпляр Random, который делегирует генератору все методы, кроме setSeed. Метод setSeed возвращенного экземпляра всегда выбрасывает исключение UnsupportedOperationException. Возвращенный экземпляр не поддерживает сериализацию.
Параметры:
generator — объект, которому делегируются вызовы RandomGenerator
Возвращает:
делегирующий экземпляр Random
Выбрасывает:
NullPointerException — если генератор равен null
Появился в версии:
19

setSeed

public void setSeed(long seed)
Задает или обновляет начальное значение этого генератора случайных чисел, используя предоставленное значение типа long (необязательная операция).
Требования к реализации:
Реализация в этом классе изменяет состояние генератора случайных чисел так, чтобы оно совпадало с состоянием сразу после создания экземпляра с помощью new Random(seed). Она атомарно обновляет начальное значение до
(seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
и сбрасывает флаг haveNextNextGaussian, используемый методом nextGaussian(). Обратите внимание, что используются только 48 бит заданного начального значения.
Параметры:
seed — начальное значение
Выбрасывает:
UnsupportedOperationException — если операция setSeed не поддерживается этим генератором случайных чисел

next

protected int next(int bits)
Генерирует следующее псевдослучайное число. Этот метод возвращает значение типа int, для которого, если аргумент bits находится в диапазоне от 1 до 32 включительно, соответствующее количество младших битов возвращенного значения будет (приблизительно) независимо выбрано как битовые значения, каждое из которых с (приблизительно) равной вероятностью будет равно 0 или 1.
Примечание к API:
Другие методы этого класса, генерирующие случайные значения, реализованы на основе этого метода, поэтому подклассы могут переопределить только этот метод, чтобы предоставить другой источник псевдослучайных чисел для всего класса.
Требования к реализации:
Реализация в этом классе атомарно обновляет начальное значение до
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
и возвращает
(int)(seed >>> (48 - bits)).

Это линейный конгруэнтный генератор псевдослучайных чисел, определенный Д. Х. Лемером и описанный Дональдом Э. Кнутом в книге Искусство программирования, том 2, третье издание: Полуточисленные алгоритмы, раздел 3.2.1.

Параметры:
bits — количество случайных битов
Возвращает:
следующее псевдослучайное значение из последовательности этого генератора случайных чисел
Появился в версии:
1.1

nextBytes

public void nextBytes(byte[] bytes)
Генерирует случайные байты и записывает их в предоставленный пользователем байтовый массив. Количество сгенерированных случайных байтов равно длине байтового массива.
Определено в:
nextBytes в интерфейсе RandomGenerator
Требования к реализации:
Метод nextBytes реализован классом Random следующим образом:
public void nextBytes(byte[] bytes) {
  for (int i = 0; i < bytes.length; )
    for (int rnd = nextInt(), n = Math.min(bytes.length - i, 4);
         n-- > 0; rnd >>= 8)
      bytes[i++] = (byte)rnd;
}
Параметры:
bytes — байтовый массив для заполнения случайными байтами
Выбрасывает:
NullPointerException — если байтовый массив равен null
Появился в версии:
1.1

nextInt

public int nextInt()
Возвращает следующее псевдослучайное равномерно распределенное значение типа int из последовательности этого генератора случайных чисел. Согласно общему контракту метода nextInt генерируется одно псевдослучайное значение типа int и возвращается. Все 232 возможных значений типа int выдаются с (приблизительно) равной вероятностью.
Определено в:
nextInt в интерфейсе RandomGenerator
Требования к реализации:
Метод nextInt реализован классом Random следующим образом:
public int nextInt() {
  return next(32);
}
Возвращает:
следующее псевдослучайное равномерно распределенное значение типа int из последовательности этого генератора случайных чисел

nextInt

public int nextInt(int bound)
Возвращает псевдослучайное равномерно распределенное значение типа int из последовательности этого генератора случайных чисел в диапазоне от 0 включительно до заданного значения исключительно. Согласно общему контракту метода nextInt псевдослучайным образом генерируется и возвращается одно значение типа int из указанного диапазона. Все bound возможных значений типа int выдаются с (приблизительно) равной вероятностью.
Определено в:
nextInt в интерфейсе RandomGenerator
Требования к реализации:
Метод nextInt(int bound) реализован классом Random следующим образом:
public int nextInt(int bound) {
  if (bound <= 0)
    throw new IllegalArgumentException("bound must be positive");

  if ((bound & -bound) == bound)  // i.e., bound is a power of 2
    return (int)((bound * (long)next(31)) >> 31);

  int bits, val;
  do {
      bits = next(31);
      val = bits % bound;
  } while (bits - val + (bound-1) < 0);
  return val;
}

Оговорка «приблизительно» в приведенном выше описании используется только потому, что следующий метод является лишь приблизительно несмещенным источником независимо выбранных битов. Если бы он был идеальным источником случайно выбранных битов, показанный алгоритм выбирал бы int значения из указанного диапазона с идеальной равномерностью.

Алгоритм немного сложен. Он отбрасывает значения, которые привели бы к неравномерному распределению (поскольку 2^31 не делится на n). Вероятность отбрасывания значения зависит от n. Наихудший случай — n=2^30+1: вероятность отбрасывания равна 1/2, а ожидаемое количество итераций до завершения цикла — 2.

Алгоритм обрабатывает случай, когда n является степенью двойки, особым образом: он возвращает нужное количество старших битов базового генератора псевдослучайных чисел. Без специальной обработки возвращалось бы нужное количество младших битов. Известно, что линейные конгруэнтные генераторы псевдослучайных чисел, такие как реализованный в этом классе, имеют короткие периоды в последовательностях значений младших битов. Поэтому этот особый случай значительно увеличивает длину последовательности значений, возвращаемых последовательными вызовами этого метода, если n является небольшой степенью двойки.

Параметры:
bound — верхняя граница (не включается). Должна быть положительной.
Возвращает:
следующее псевдослучайное равномерно распределенное значение типа int от нуля включительно до bound исключительно из последовательности этого генератора случайных чисел
Выбрасывает:
IllegalArgumentException — если граница не является положительной
Появился в версии:
1.2

nextLong

public long nextLong()
Возвращает следующее псевдослучайное равномерно распределенное значение типа long из последовательности этого генератора случайных чисел. Согласно общему контракту метода nextLong псевдослучайным образом генерируется и возвращается одно значение типа long.
Определено в:
nextLong в интерфейсе RandomGenerator
Требования к реализации:
Метод nextLong реализован классом Random следующим образом:
public long nextLong() {
  return ((long)next(32) << 32) + next(32);
}
Поскольку класс Random использует начальное значение длиной всего 48 бит, этот алгоритм не возвращает все возможные значения типа long.
Возвращает:
следующее псевдослучайное равномерно распределенное значение типа long из последовательности этого генератора случайных чисел

nextBoolean

public boolean nextBoolean()
Возвращает следующее псевдослучайное равномерно распределенное значение типа boolean из последовательности этого генератора случайных чисел. Согласно общему контракту метода nextBoolean псевдослучайным образом генерируется и возвращается одно значение типа boolean. Значения true и false выдаются с (приблизительно) равной вероятностью.
Определено в:
nextBoolean в интерфейсе RandomGenerator
Требования к реализации:
Метод nextBoolean реализован классом Random следующим образом:
public boolean nextBoolean() {
  return next(1) != 0;
}
Возвращает:
следующее псевдослучайное равномерно распределенное значение типа boolean из последовательности этого генератора случайных чисел
Появился в версии:
1.2

nextFloat

public float nextFloat()
Возвращает следующее псевдослучайное равномерно распределенное значение типа float в диапазоне от 0.0 до 1.0 из последовательности этого генератора случайных чисел.

Согласно общему контракту метода nextFloat псевдослучайным образом генерируется и возвращается одно значение типа float, выбранное с (приблизительно) равномерным распределением из диапазона от 0.0f включительно до 1.0f исключительно. Все 224 возможных значений типа float вида m x 2-24, где m — положительное целое число меньше 224, выдаются с (приблизительно) равной вероятностью.

Определено в:
nextFloat в интерфейсе RandomGenerator
Требования к реализации:
Метод nextFloat реализован классом Random следующим образом:
public float nextFloat() {
  return next(24) / ((float)(1 << 24));
}

Оговорка «приблизительно» в приведенном выше описании используется только потому, что следующий метод является лишь приблизительно несмещенным источником независимо выбранных битов. Если бы он был идеальным источником случайно выбранных битов, показанный алгоритм выбирал бы float значения из указанного диапазона с идеальной равномерностью.

[В ранних версиях Java результат вычислялся неверно следующим образом:

 return next(30) / ((float)(1 << 30));
На первый взгляд это может показаться эквивалентным или даже более предпочтительным, но на самом деле такой способ вносил небольшую неравномерность из-за смещения при округлении чисел с плавающей точкой: вероятность того, что младший бит мантиссы будет равен 0, была немного выше, чем вероятность того, что он будет равен 1.]
Возвращает:
следующее псевдослучайное равномерно распределенное значение типа float в диапазоне от 0.0f до 1.0f из последовательности этого генератора случайных чисел

nextDouble

public double nextDouble()
Возвращает следующее псевдослучайное равномерно распределенное значение типа double в диапазоне от 0.0 до 1.0 из последовательности этого генератора случайных чисел.

Согласно общему контракту метода nextDouble псевдослучайным образом генерируется и возвращается одно значение типа double, выбранное с (приблизительно) равномерным распределением из диапазона от 0.0d включительно до 1.0d исключительно.

Определено в:
nextDouble в интерфейсе RandomGenerator
Требования к реализации:
Метод nextDouble реализован классом Random следующим образом:
public double nextDouble() {
  return (((long)next(26) << 27) + next(27))
    / (double)(1L << 53);
}

Оговорка «приблизительно» в приведенном выше описании используется только потому, что метод next является лишь приблизительно несмещенным источником независимо выбранных битов. Если бы он был идеальным источником случайно выбранных битов, показанный алгоритм выбирал бы double значения из указанного диапазона с идеальной равномерностью.

[В ранних версиях Java результат вычислялся неверно следующим образом:

 return (((long)next(27) << 27) + next(27)) / (double)(1L << 54);
На первый взгляд это может показаться эквивалентным или даже более предпочтительным, но на самом деле такой способ вносил значительную неравномерность из-за смещения при округлении чисел с плавающей точкой: вероятность того, что младший бит мантиссы будет равен 0, была втрое выше, чем вероятность того, что он будет равен 1! На практике эта неравномерность, вероятно, не имеет большого значения, но мы стремимся к совершенству.]
Возвращает:
следующее псевдослучайное равномерно распределенное значение типа double в диапазоне от 0.0 до 1.0 из последовательности этого генератора случайных чисел
См. также:
  • Math.random()

nextGaussian

public double nextGaussian()
Возвращает следующее псевдослучайное значение типа double, распределенное по Гауссу («нормально»), со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора случайных чисел.

Согласно общему контракту метода nextGaussian псевдослучайным образом генерируется и возвращается одно значение типа double, выбранное из (приблизительно) стандартного нормального распределения со средним значением 0.0 и стандартным отклонением 1.0.

Определено в:
nextGaussian в интерфейсе RandomGenerator
Требования к реализации:
Метод nextGaussian реализован классом Random как потокобезопасная версия следующего алгоритма:
private double nextNextGaussian;
private boolean haveNextNextGaussian = false;

public double nextGaussian() {
  if (haveNextNextGaussian) {
    haveNextNextGaussian = false;
    return nextNextGaussian;
  } else {
    double v1, v2, s;
    do {
      v1 = 2 * nextDouble() - 1;   // between -1.0 and 1.0
      v2 = 2 * nextDouble() - 1;   // between -1.0 and 1.0
      s = v1 * v1 + v2 * v2;
    } while (s >= 1 || s == 0);
    double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
    nextNextGaussian = v2 * multiplier;
    haveNextNextGaussian = true;
    return v1 * multiplier;
  }
}
Здесь используется полярный метод Г. Э. П. Бокса, М. Э. Мюллера и Дж. Марсальи, описанный Дональдом Э. Кнутом в книге Искусство программирования, том 2, третье издание: Полуточисленные алгоритмы, раздел 3.4.1, подраздел C, алгоритм P. Обратите внимание, что этот алгоритм генерирует два независимых значения всего за один вызов StrictMath.log и один вызов StrictMath.sqrt.
Возвращает:
следующее псевдослучайное значение типа double, распределенное по Гауссу («нормально»), со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора случайных чисел

ints

public IntStream ints(long streamSize)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений типа int.

Псевдослучайное значение типа int генерируется так, как если бы оно было результатом вызова метода nextInt().

Определено в:
ints в интерфейсе RandomGenerator
Параметры:
streamSize — количество генерируемых значений
Возвращает:
поток псевдослучайных значений типа int
Выбрасывает:
IllegalArgumentException — если streamSize меньше нуля
Появился в версии:
1.8

ints

public IntStream ints()
Возвращает фактически неограниченный поток псевдослучайных значений типа int.

Псевдослучайное значение типа int генерируется так, как если бы оно было результатом вызова метода nextInt().

Определено в:
ints в интерфейсе RandomGenerator
Примечание по реализации:
Этот метод реализован так, чтобы быть эквивалентным ints(Long.MAX_VALUE).
Возвращает:
поток псевдослучайных значений типа int
Появился в версии:
1.8

ints

public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений типа int, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (исключительно).

Псевдослучайное значение типа int генерируется так, как если бы оно было результатом вызова следующего метода с заданными нижней и верхней границами:

int nextInt(int origin, int bound) {
  int n = bound - origin;
  if (n > 0) {
    return nextInt(n) + origin;
  }
  else {  // range not representable as int
    int r;
    do {
      r = nextInt();
    } while (r < origin || r >= bound);
    return r;
  }
}
Определено в:
ints в интерфейсе RandomGenerator
Параметры:
streamSize — количество генерируемых значений
randomNumberOrigin — нижняя граница (включительно) для каждого случайного значения
randomNumberBound — верхняя граница (исключительно) для каждого случайного значения
Возвращает:
поток псевдослучайных значений типа int, каждое из которых имеет заданные нижнюю границу (включительно) и верхнюю границу (исключительно)
Выбрасывает:
IllegalArgumentException — если streamSize меньше нуля или randomNumberOrigin больше либо равно randomNumberBound
Появился в версии:
1.8

ints

public IntStream ints(int randomNumberOrigin, int randomNumberBound)
Возвращает фактически неограниченный поток псевдослучайных значений типа int, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (исключительно).

Псевдослучайное значение типа int генерируется так, как если бы оно было результатом вызова следующего метода с заданными нижней и верхней границами:

int nextInt(int origin, int bound) {
  int n = bound - origin;
  if (n > 0) {
    return nextInt(n) + origin;
  }
  else {  // range not representable as int
    int r;
    do {
      r = nextInt();
    } while (r < origin || r >= bound);
    return r;
  }
}
Определено в:
ints в интерфейсе RandomGenerator
Примечание по реализации:
Этот метод реализован так, чтобы быть эквивалентным ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Параметры:
randomNumberOrigin — нижняя граница (включительно) для каждого случайного значения
randomNumberBound — верхняя граница (исключительно) для каждого случайного значения
Возвращает:
поток псевдослучайных значений типа int, каждое из которых имеет заданные нижнюю границу (включительно) и верхнюю границу (исключительно)
Выбрасывает:
IllegalArgumentException — если randomNumberOrigin больше либо равно randomNumberBound
Появился в версии:
1.8

longs

public LongStream longs(long streamSize)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений типа long.

Псевдослучайное значение типа long генерируется так, как если бы оно было результатом вызова метода nextLong().

Определено в:
longs в интерфейсе RandomGenerator
Параметры:
streamSize — количество генерируемых значений
Возвращает:
поток псевдослучайных значений типа long
Выбрасывает:
IllegalArgumentException — если streamSize меньше нуля
Появился в версии:
1.8

longs

public LongStream longs()
Возвращает фактически неограниченный поток псевдослучайных значений типа long.

Псевдослучайное значение типа long генерируется так, как если бы оно было результатом вызова метода nextLong().

Определено в:
longs в интерфейсе RandomGenerator
Примечание по реализации:
Этот метод реализован так, чтобы быть эквивалентным longs(Long.MAX_VALUE).
Возвращает:
поток псевдослучайных значений типа long
Появился в версии:
1.8

longs

public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений типа long, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (исключительно).

Псевдослучайное значение типа long генерируется так, как если бы оно было результатом вызова следующего метода с заданными нижней и верхней границами:

long nextLong(long origin, long bound) {
  long r = nextLong();
  long n = bound - origin, m = n - 1;
  if ((n & m) == 0L)  // power of two
    r = (r & m) + origin;
  else if (n > 0L) {  // reject over-represented candidates
    for (long u = r >>> 1;            // ensure nonnegative
         u + m - (r = u % n) < 0L;    // rejection check
         u = nextLong() >>> 1) // retry
        ;
    r += origin;
  }
  else {              // range not representable as long
    while (r < origin || r >= bound)
      r = nextLong();
  }
  return r;
}
Определено в:
longs в интерфейсе RandomGenerator
Параметры:
streamSize — количество генерируемых значений
randomNumberOrigin — нижняя граница (включительно) для каждого случайного значения
randomNumberBound — верхняя граница (исключительно) для каждого случайного значения
Возвращает:
поток псевдослучайных значений типа long, каждое из которых имеет заданные нижнюю границу (включительно) и верхнюю границу (исключительно)
Выбрасывает:
IllegalArgumentException — если streamSize меньше нуля или randomNumberOrigin больше либо равно randomNumberBound
Появился в версии:
1.8

longs

public LongStream longs(long randomNumberOrigin, long randomNumberBound)
Возвращает фактически неограниченный поток псевдослучайных значений типа long, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (исключительно).

Псевдослучайное значение типа long генерируется так, как если бы оно было результатом вызова следующего метода с заданными нижней и верхней границами:

long nextLong(long origin, long bound) {
  long r = nextLong();
  long n = bound - origin, m = n - 1;
  if ((n & m) == 0L)  // power of two
    r = (r & m) + origin;
  else if (n > 0L) {  // reject over-represented candidates
    for (long u = r >>> 1;            // ensure nonnegative
         u + m - (r = u % n) < 0L;    // rejection check
         u = nextLong() >>> 1) // retry
        ;
    r += origin;
  }
  else {              // range not representable as long
    while (r < origin || r >= bound)
      r = nextLong();
  }
  return r;
}
Определено в:
longs в интерфейсе RandomGenerator
Примечание по реализации:
Этот метод реализован так, чтобы быть эквивалентным longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Параметры:
randomNumberOrigin — нижняя граница (включительно) для каждого случайного значения
randomNumberBound — верхняя граница (исключительно) для каждого случайного значения
Возвращает:
поток псевдослучайных значений типа long, каждое из которых имеет заданные нижнюю границу (включительно) и верхнюю границу (исключительно)
Выбрасывает:
IllegalArgumentException — если randomNumberOrigin больше либо равно randomNumberBound
Появился в версии:
1.8

doubles

public DoubleStream doubles(long streamSize)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений типа double, каждое из которых находится в диапазоне от нуля включительно до единицы исключительно.

Псевдослучайное значение типа double генерируется так, как если бы оно было результатом вызова метода nextDouble().

Определено в:
doubles в интерфейсе RandomGenerator
Параметры:
streamSize — количество генерируемых значений
Возвращает:
поток значений типа double
Выбрасывает:
IllegalArgumentException — если streamSize меньше нуля
Появился в версии:
1.8

doubles

public DoubleStream doubles()
Возвращает фактически неограниченный поток псевдослучайных значений типа double, каждое из которых находится в диапазоне от нуля включительно до единицы исключительно.

Псевдослучайное значение типа double генерируется так, как если бы оно было результатом вызова метода nextDouble().

Определено в:
doubles в интерфейсе RandomGenerator
Примечание по реализации:
Этот метод реализован так, чтобы быть эквивалентным doubles(Long.MAX_VALUE).
Возвращает:
поток псевдослучайных значений типа double
Появился в версии:
1.8

doubles

public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений типа double, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (исключительно).
Определено в:
doubles в интерфейсе RandomGenerator
Параметры:
streamSize — количество генерируемых значений
randomNumberOrigin — нижняя граница (включительно) для каждого случайного значения
randomNumberBound — верхняя граница (исключительно) для каждого случайного значения
Возвращает:
поток псевдослучайных значений типа double, каждое из которых имеет заданные нижнюю границу (включительно) и верхнюю границу (исключительно)
Выбрасывает:
IllegalArgumentException — если streamSize меньше нуля, или randomNumberOrigin не является конечным числом, или randomNumberBound не является конечным числом, или randomNumberOrigin больше либо равно randomNumberBound
Появился в версии:
1.8

doubles

public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
Возвращает фактически неограниченный поток псевдослучайных значений типа double, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (исключительно).
Определено в:
doubles в интерфейсе RandomGenerator
Примечание по реализации:
Этот метод реализован так, чтобы быть эквивалентным doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Параметры:
randomNumberOrigin — нижняя граница (включительно) для каждого случайного значения
randomNumberBound — верхняя граница (исключительно) для каждого случайного значения
Возвращает:
поток псевдослучайных значений типа double, каждое из которых имеет заданные нижнюю границу (включительно) и верхнюю границу (исключительно)
Выбрасывает:
IllegalArgumentException — если randomNumberOrigin не является конечным числом, или randomNumberBound не является конечным числом, или randomNumberOrigin больше либо равно randomNumberBound
Появился в версии:
1.8

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры основных понятий, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Random.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API