在Java中使用特定种子作为随机数生成器

时间:2014-03-31 02:48:25

标签: java random seed random-seed

我知道此前已经有很多关于种子的问题,我已经看了很多,但我仍然在苦苦挣扎,对不起,如果这似乎重复了!基本上我正在提示用户输入值(将是种子),然后使用该种子生成随机值。我的代码分为两个单独的文件,但我会尽量为你保留这些文件。

文件1:

Random generator = new Random();

public RandomWalk(int gridSize){

    gridSize = generator.nextInt();
    this.gridSize = gridSize;
}



public RandomWalk(int gridSize, long seed){
    generator.nextInt();
    this.gridSize = gridSize;
}

文件2:

public static long seed = 0;
int i = 1;
    System.out.println("Enter random seed (0 for no seed): ");
    while (i == 1) {
        seed = scan.nextInt();
        if (!(seed == 0)) {
            if (seed > 0) {
                i++;
                //Generate numbers based on seed entered
            } else {
                System.out.println("You need to enter a positive integer.");
            }
        } else {
            System.out.println("Seed is 0, a random seed will be generated");
            //Make this generate a random seed
            i++;
        }
    }

public static void main(String[] args) {

    getInput();

    RandomWalk walk;
    if (seed==0){
        walk = new RandomWalk(gridSize);
    } else {
        walk = new RandomWalk(gridSize, seed);
    }

    walk.createWalk();

1 个答案:

答案 0 :(得分:1)

你并没有真正提出问题,但我会尝试推断它。您的代码是否按预期工作?

我看到的一个问题是,接收种子的RandomWalk构造函数从不对种子做任何事情。试试这个:

Random generator;

public RandomWalk(int gridSize){
    generator = new Random();
    gridSize = generator.nextInt();
    this.gridSize = gridSize;
}



public RandomWalk(int gridSize, long seed){
    generator = new Random(seed);
    gridSize = generator.nextInt();
    this.gridSize = gridSize;
}

请注意,种子将传递给Random构造函数。此外,您对generator.nextInt()的调用是在第二个构造函数中进行的,而不将其返回值赋给gridSize。我认为这可能不是你打算做的。

您可能需要查看Java SDK documentation for Random。它有2个构造函数,一个接受种子参数,另一个基本上为你创建一个。