Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中两次生成相同的随机序列?_Java_Random - Fatal编程技术网

如何在java中两次生成相同的随机序列?

如何在java中两次生成相同的随机序列?,java,random,Java,Random,第一个构造函数随机生成一个迷宫。我需要实现代码,以便在同一技能级别调用MazeBuilder.build两次时,它将提供相同的结果。我认为第二个构造函数中的“this.random=random;”可以做到这一点,但我不确定这是否正确。您想要实现的实际上被称为随机种子。 如果使用相同的种子初始化Random,则每次都会得到相同的序列 阅读更多关于什么是随机种子或 您可以简单地执行以下操作: public class MazeBuilder implements Runnable { /

第一个构造函数随机生成一个迷宫。我需要实现代码,以便在同一技能级别调用MazeBuilder.build两次时,它将提供相同的结果。我认为第二个构造函数中的“this.random=random;”可以做到这一点,但我不确定这是否正确。

您想要实现的实际上被称为随机种子。 如果使用相同的种子初始化
Random
,则每次都会得到相同的序列

阅读更多关于什么是随机种子或

您可以简单地执行以下操作:

public class MazeBuilder implements Runnable {

    // class internal local variables
    protected SingleRandom random ; // random number stream, used to make randomized decisions, e.g for direction to go
    Order order; // describes what is wanted, e.g. a perfect maze or not    
    /**
     * Constructor for a randomized maze generation
     */
    public MazeBuilder(){
        random = SingleRandom.getRandom();
    }
    /**
     * Constructor with option to make maze generation deterministic or random
     */
    public MazeBuilder(boolean deterministic){
        if (true == deterministic)
        {
            this.random = random ;
        }


    random = SingleRandom.getRandom();
}

我不知道如何生成随机数,也不知道什么是
SingleRandom
对象
但是在java中有一个
Random
class=>
其中
设置种子
方法:

其工作方式如下:

它更改此随机数生成器对象的状态,以便 处于完全相同的状态,就好像它是用 作为种子的争论

下面的代码使用
setSeed
重置
random
对象,并以这种方式生成两次相同的随机数流:

public class MazeBuilder
{
    private Random _random;

    public MazeBuilder()
    {
        _random = new Random();
    }

    public MazeBuilder(int seed)
    {
        _random = new Random(seed);
    }

    public void generateMaze()
    {
        // here you use _random.next()
    }
}
Random rand=new Random();
兰特固定种子(3);

对于(inti=1;i如果您使用的是类或类似的类,请尝试以下方法:

 Random rand = new Random();

  rand.setSeed(3);
  for( int i = 1; i <= 10; i++){
      System.out.println( rand.nextInt());
  }

  System.out.println( "=============");

  rand.setSeed(3);
  for( int i = 1; i <= 10; i++){
      System.out.println( rand.nextInt());
  }

-1155099828
-1879439976
304908421
-836442134
288278256
-1795872892
-995758198
-1824734168
976394918
-634239373
=============
-1155099828
-1879439976
304908421
-836442134
288278256
-1795872892
-995758198
-1824734168
976394918
-634239373

通过调用
setSeed()
使用硬编码的值,可以确保每次运行时都遵循相同的序列。

什么是SingleRandom?你是说使用相同的随机种子吗?通常你使用相同的种子。这个问题的美妙之处在于……
两次生成相同的随机序列
我不确定我的代码是否完全正确-我不是Java,而是C#开发者。如果有任何错误,请告诉我:)是的!这正是我的班级看起来的样子,这似乎是正确的。
private static final int SEED = 1234; // or any other int

/**
 * Constructor with option to make maze generation deterministic or random
 */
public MazeBuilder(boolean deterministic) {
    random = SingleRandom.getRandom();
    if (deterministic) {
        random.setSeed(SEED);
    }
}