Как создать генератор случайных чисел Java, который создает 3 числа, используя семена?

Я пытаюсь создать генератор случайных чисел с помощью java, который выводит 3 числа от 1 до 8, используя семена из пользовательского ввода, например, когда пользователь вводит 1 в качестве семени, он устанавливает набор из 3 чисел, а затем устанавливает еще 3 числа, если пользователь вводит другое семя, такое как 4, тогда он даст другой набор чисел?

Я знаю, как использовать scnr.nextInt(); для пользовательского ввода для начального числа, но как мне использовать его для начального числа и генератора чисел?


person Nong Shim    schedule 13.01.2015    source источник
comment
1. Создайте генератор случайных чисел Java, который создает одно число, используя начальное число. 2. Повторите три раза.   -  person default locale    schedule 13.01.2015
comment
stackoverflow.com/questions/21049747/ см. эту ссылку, это может вам помочь...   -  person Narendra Sorathiya    schedule 23.03.2017


Ответы (4)


В java случайные числа могут быть получены с использованием класса Random. Например:

Random randomNumbers=new Random();
int random=randomNumbers.nextInt();

Это генерирует случайное число от –2 147 483 648 до +2 147 483 647. В приведенном выше коде начальное значение не указано. Таким образом, программа использует текущее системное время в миллисекундах в качестве начального значения. Таким образом, приведенный выше оператор эквивалентен:

Random randomNumbers=new Random(System.currentTimeMillis());

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

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

Random randomNumbers=new Random(2);
int random=randomNumbers.nextInt(8);

генерирует случайное число от 0 до 7, используя начальное значение 2, которое мы, конечно, можем заставить пользователя вводить. Значение 8 называется коэффициентом масштабирования. Но в большинстве случаев нам приходится сдвигать эти значения, чтобы получить желаемый результат. Таким образом, сгенерированные выше случайные числа должны быть сдвинуты на 1. Таким образом, мы пишем выражение:

int randomNum=1+randomNumbers.nextInt(8);

Теперь он генерирует случайные числа в диапазоне от 1 до 8.

Чтобы сгенерировать 3 случайных числа в последовательности, вы можете использовать цикл.

for(int i=0;i<3;i++){
  int random=1+randomNumbers.nextInt(8);
  System.out.println(random);
 }
person hermit    schedule 13.01.2015

Вы всегда можете использовать класс Random в Java.

Random.setSeed();
Random.nextInt();

Имейте в виду, что если вы хотите просто получить 3 случайных числа без необходимости воспроизводить свои результаты, начальное значение действительно бесполезно; просто вызов Random.nextInt(8) даст вам число от 0 до 8 (включая 0, исключая 8).

Если вы действительно хотите использовать семя, вам нужно сначала создать объект Random.

Random x = new Random();
x.setSeed(userInput);
x.nextInt(8);

Это будет генерировать только одно случайное целое число, поэтому хорошей идеей может быть сделать так, чтобы пользователь должен был ввести как минимум 3 целых числа, которые вы можете запустить (если вам нужен набор из 3 чисел).

например: пользовательский ввод (usrInput) равен 123

x = usrInput % 10;
usrInput = usrInput/10;
y = usrInput % 10;
usrInput = usrInput/10;
z = usrInput % 10;

//generate Random numbers using x y and z as 3 seeds.
...

РЕДАКТИРОВАТЬ: Подумав об этом еще немного, я понял, что на самом деле вы можете просто вызвать nextInt (8) 3 раза. Семя устанавливает начальную точку генератора, поэтому вам на самом деле не нужны 3 пользовательских ввода, достаточно одного.

person Aify    schedule 13.01.2015

как насчет SecureRandom? вы можете, по крайней мере, определить некоторые семена, используя этот класс.

person Marc Bredt    schedule 13.01.2015

Используйте Random и оператор по модулю, чтобы иметь число в вашем диапазоне (yourRandomNumber% 8) + 1

person Anton Afanasjew    schedule 13.01.2015