我正在尝试使用java创建一个随机数生成器,并使用来自用户输入的种子从1-8输出3个数字,例如用户输入1作为种子,它设置了一组3个数字,然后设置输出另外3个数字,如果用户输入另一个种子,如4,那么它会给出一组不同的数字吗?
我知道如何使用scnr.nextInt();
作为种子的用户输入,但是如何将它用于种子和数字生成器?
答案 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