我正在尝试用java创建一个随机数生成器,并使用用户输入的种子输出1-8中的3个数字,例如用户输入1作为种子,它会列出一组3个数字,然后列出另一个3个数字,如果用户输入另一个种子,例如4,那么它会给出一组不同的数字?
我知道如何使用
scnr.nextInt();
作为种子的用户输入,但是如何将它用于种子和数字生成器?
您始终可以在 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);
这只会生成一个随机整数,因此一个好主意可能是让用户必须输入至少 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 个用户输入,只需一个就可以了。
在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);
}
SecureRandom怎么样?您至少可以使用此类定义一些种子。
使用随机和模运算符获得范围内的数字 (yourRandomNumber % 8) + 1
下面的代码应该适合您
import java.util.Random;
import java.util.Scanner;
public class RandomGenerator {
public static void main(String[] args) {
Scanner src = new Scanner(System.in);
int seed = src.nextInt();
Random random = new Random(seed);
for(int i=1;i<=3;i++){
System.out.println(random.nextInt(8));
}
}
}