Буквально, вам не нужно перепроектировать класс Random.
Исходный код опубликован для всеобщего обозрения.(Например, Google для «java.util.Random source» ...)
Алгоритмы, которые он использует, описаны в javadocs достаточно подробно, чтобы вы могли переопределить его.Даже алгоритм для установки начального числа.
Но если вы спрашиваете, можете ли вы запустить случайную последовательность в обратном порядке, чтобы восстановить начальное число, вам нужно будет тщательно изучить код и разработатьобратная функция для LCG.Но я не уверен, что этого будет достаточно, поскольку nextInt(int)
и даже nextInt()
не возвращают все 48-битное состояние генератора.
Чтобы обойти это, вам, возможно, понадобится сделать "мерзкое отражение", чтобы извлечь состояние.И если вы собираетесь это сделать, исходный код показывает, что класс Random
записывает значение начального числа.Таким образом, вы можете просто извлечь его напрямую ... таким же образом.
(Как? Найдите вопрос и ответ, объясняющий, как получить доступ к закрытому полю с помощью отражения.)