如何创建使用种子创建3个数字的java随机数生成器?

时间:2015-01-13 08:06:17

标签: java random numbers generator seed

我正在尝试使用java创建一个随机数生成器,并使用来自用户输入的种子从1-8输出3个数字,例如用户输入1作为种子,它设置了一组3个数字,然后设置输出另外3个数字,如果用户输入另一个种子,如4,那么它会给出一组不同的数字吗?

我知道如何使用scnr.nextInt();作为种子的用户输入,但是如何将它用于种子和数字生成器?

4 个答案:

答案 0 :(得分:4)

您始终可以在Java中使用Random类。

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

请记住,如果你想获得3个随机数而不需要重现你的结果,那么种子真的没用;只需调用Random.nextInt(8)就会得到0到8之间的数字(包含0,不包括8)。

如果你真的想使用种子,你需要先创建一个Random对象。

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

这只会生成一个随机的int,所以一个好主意可能就是让用户必须输入至少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个用户输入,只需一个就可以了。

答案 1 :(得分:1)

在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);

使用种子值2生成0到7的随机数,我们当然可以让用户输入。值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);
 }

答案 2 :(得分:0)

SecureRandom怎么样?你至少可以用这个类定义一些种子。

答案 3 :(得分:0)

使用Random和模运算符使您的范围内的数字(yourRandomNumber%8)+ 1