Подтвердить что ты не робот

Почему класс Random не статичен?

В Java у нас есть статический класс Math. Вам не нужно создавать свои объекты так, чтобы их статические. Другой - класс Random. Нам не нужно создавать свои экземпляры, так почему же это не статично? В моих классах я часто использую случайные онемения и злюсь, когда нужно создавать полевые ряды в каждом классе для генерации случайных чисел. Так почему же он не статичен?

4b9b3361

Ответ 1

Класс Random имеет состояние, в том числе, где он находится в своей последовательности, поскольку полученные значения не являются по-настоящему случайными, а просто псевдослучайной последовательностью.

Это можно продемонстрировать, инициализируя два экземпляра с одним и тем же семенем.

Random a = new Random(123);
Random b = new Random(123);
for (int i = 0; i < 5; i++) {
    System.out.println(a.nextInt() + "," + b.nextInt());
}

Выход

-1188957731,-1188957731
1018954901,1018954901
-39088943,-39088943
1295249578,1295249578
1087885590,1087885590

Если вы создаете со стандартным конструктором Random(), то семя инициализируется на основе текущего времени в наносекундах + статический счетчик, что означает, что разные экземпляры, вероятно, будут иметь разные последовательности.

Ответ 2

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

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

Ответ 3

Все о семенах. Как вы знаете, мы не говорим о реальных случайных числах, кроме псевдослучайных. Когда вы знаете первый номер, вы можете рассчитать остальные. Вот почему мы используем somethig, что называется "семя". Каждый объект Random имеет разное семя. Если Random будет статическим, у вас не может быть двух разных семян. Обратите внимание, что метод setSeed() будет влиять на все генераторы случайных чисел (и мы часто хотим изменить только один).

Ответ 4

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