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