Spec-Zone.ru › OpenJDK 24

Класс Random

java.lang.Object
java.util.Random
Все реализованные интерфейсы:
Serializable, RandomGenerator
Прямые известные подклассы:
SecureRandom, ThreadLocalRandom
public class Random extends Object implements RandomGenerator, Serializable
Экземпляр этого класса используется для генерации потока псевдослучайных чисел; его период составляет только 248. Класс использует 48-битное семя, которое модифицируется с помощью линейной формулы конгруэнтности. (См. Дональд Э. Кнут, Искусство программирования, том 2, третье издание: Алгоритмы для работы с числами, раздел 3.2.1.)

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

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

Многие приложения найдут метод Math.random() более простым в использовании.

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

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

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

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

Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.random.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 значение семени (необязательная операция).

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

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

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

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

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

Random

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

Random

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

 Random rnd = new Random();
 rnd.setSeed(seed);
 
Параметры:
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)
Устанавливает или обновляет начальное значение (seed) этого генератора случайных чисел, используя предоставленное long значение начального значения (seed) (необязательная операция).
Требования к реализации:
Реализация в этом классе изменяет состояние этого генератора случайных чисел так, что он находится в том же состоянии, что и если он был только что создан с new Random(seed). Она атомарно обновляет начальное значение (seed) до
(seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
и очищает флаг haveNextNextGaussian, используемый методом nextGaussian(). Обратите внимание, что используется только 48 бит заданного значения seed.
Параметры:
seed - значение seed
Исключение:
UnsupportedOperationException - если операция setSeed не поддерживается этим генератором случайных чисел

next

protected int next(int bits)
Генерирует следующее псевдослучайное число. Этот метод возвращает значение int, такое что, если аргумент bits находится между 1 и 32 (включительно), то столько же младших битов возвращаемого значения будут (приблизительно) независимо выбранными значениями битов, каждое из которых (приблизительно) равновероятно будет равно 0 или 1.
Примечание API:
Другие методы генерации случайных чисел в этом классе реализованы с помощью этого метода, поэтому подклассы могут переопределить только этот метод, чтобы обеспечить другой источник псевдослучайных чисел для всего класса.
Требования к реализации:
Реализация в этом классе атомарно обновляет начальное значение (seed) до
(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()
Возвращает следующее псевдослучайное, равномерно распределенное целое значение от этого генератора случайных чисел. Общий контракт nextInt заключается в том, что одно целое значение генерируется псевдослучайным образом и возвращается. Все 232 возможных целых значений генерируются с (приблизительно) равной вероятностью.
Указано в:
nextInt в интерфейсе RandomGenerator
Требования к реализации:
Метод nextInt реализуется классом Random как если бы:

 public int nextInt() {
   return next(32);
 }
Возвращает:
следующее псевдослучайное, равномерно распределенное целое значение от этого генератора случайных чисел

nextInt

public int nextInt(int bound)
Возвращает псевдослучайное, равномерно распределенное целое значение между 0 (включительно) и указанным значением (исключительно), взятое из последовательности этого генератора случайных чисел. Общий контракт nextInt заключается в том, что одно целое значение в указанном диапазоне генерируется псевдослучайным образом и возвращается. Все bound возможные целые значения генерируются с (приблизительно) равной вероятностью.
Указано в:
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 - верхняя граница (исключая). Должен быть положительным.
Возвращает:
следующее псевдослучайное, равномерно распределенное целое значение от нуля (включительно) до bound (исключая) из последовательности этого генератора случайных чисел
Исключение:
IllegalArgumentException - если bound не положительное
С:
1.2

nextLong

public long nextLong()
Возвращает следующее псевдослучайное, равномерно распределенное длинное целое значение из последовательности этого генератора случайных чисел. Общий контракт nextLong заключается в том, что одно длинное целое значение генерируется псевдослучайным образом и возвращается.
Указано в:
nextLong в интерфейсе RandomGenerator
Требования к реализации:
Метод nextLong реализуется классом Random как если бы:

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

nextBoolean

public boolean nextBoolean()
Возвращает следующее псевдослучайное, равномерно распределенное булево значение из последовательности этого генератора случайных чисел. Общий контракт nextBoolean заключается в том, что одно булево значение генерируется псевдослучайным образом и возвращается. Значения true и false генерируются с (приблизительно) равной вероятностью.
Указано в:
nextBoolean в интерфейсе RandomGenerator
Требования к реализации:
Метод nextBoolean реализуется классом Random как если бы:

 public boolean nextBoolean() {
   return next(1) != 0;
 }
Возвращает:
следующее псевдослучайное, равномерно распределенное булево значение из последовательности этого генератора случайных чисел
С:
1.2

nextFloat

public float nextFloat()
Возвращает следующее псевдослучайное, равномерно распределённое значение с плавающей запятой между 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.]
Возвращает:
следующее псевдослучайное, равномерно распределённое значение с плавающей запятой между 0.0f и 1.0f из последовательности этого генератора случайных чисел

nextDouble

public double nextDouble()
Возвращает следующее псевдослучайное, равномерно распределённое значение с плавающей запятой между 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! Эта неоднородность, вероятно, не имеет большого значения на практике, но мы стремимся к совершенству.]
Возвращает:
следующее псевдослучайное, равномерно распределённое значение с плавающей запятой между 0.0 и 1.0 из последовательности этого генератора случайных чисел
См. также:
  • Math.random()

nextGaussian

public double nextGaussian()
Возвращает следующее псевдослучайное, гауссовское («нормальное») значение с плавающей запятой со средним значением 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, подразд. С, алгоритм P. Обратите внимание, что он генерирует два независимых значения ценой только одного вызова StrictMath.log и одного вызова StrictMath.sqrt.
Возвращает:
следующее псевдослучайное, гауссовское («нормальное») значение с плавающей запятой со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора случайных чисел

ints

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

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

Указано в:
ints в интерфейсе RandomGenerator
Параметры:
streamSize - количество генерируемых значений
Возвращает:
поток псевдослучайных целочисленных значений
Исключения:
IllegalArgumentException - если streamSize меньше нуля
См. также:
1.8

ints

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

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

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

ints

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

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

 
 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 - предельное значение (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных целочисленных значений, каждое из которых имеет заданное начальное значение (включительно) и предельное значение (исключительно)
Исключения:
IllegalArgumentException - если streamSize меньше нуля или randomNumberOrigin больше или равно randomNumberBound
См. также:
1.8

ints

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

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

 
 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 - предельное значение (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных целочисленных значений, каждое из которых имеет заданное начальное значение (включительно) и предельное значение (исключительно)
Исключения:
IllegalArgumentException - если randomNumberOrigin больше или равно randomNumberBound
См. также:
1.8

longs

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

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

Указано в:
longs в интерфейсе RandomGenerator
Параметры:
streamSize - количество генерируемых значений
Возвращает:
поток псевдослучайных длинных целочисленных значений
Исключения:
IllegalArgumentException - если streamSize меньше нуля
См. также:
1.8

longs

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

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

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

longs

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

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

 
 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 - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных целых чисел, каждое с заданным началом (включительно) и границей (исключительно)
Исключение:
IllegalArgumentException - если streamSize меньше нуля или randomNumberOrigin больше или равно randomNumberBound
С:
1.8

longs

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

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

 
 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 - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных целых чисел, каждое с заданным началом (включительно) и границей (исключительно)
Исключение:
IllegalArgumentException - если randomNumberOrigin больше или равно randomNumberBound
С:
1.8

doubles

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

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

Указано в:
doubles в интерфейсе RandomGenerator
Параметры:
streamSize - количество генерируемых значений
Возвращает:
поток значений с плавающей запятой двойной точности
Исключение:
IllegalArgumentException - если streamSize меньше нуля
С:
1.8

doubles

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

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

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

doubles

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

doubles

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Random.html

Spec-Zone.ru

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