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();
}
第一个构造函数随机生成一个迷宫。我需要实现代码,这样如果MazeBuilder.build被调用两次相同的技能级别,它将提供相同的结果。我认为" this.random = random;"在第二个构造函数中将执行此操作,但我不确定这是否正确。
答案 0 :(得分:1)
您想要实现的内容实际上称为随机种子。
如果使用相同的种子初始化Random
,则每次都会得到相同的序列。
详细了解随机种子at Wikipedia或at StackOverflow。
您可以简单地执行以下操作:
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()
}
}
答案 1 :(得分:1)
如果您使用的是this类或类似的类,请尝试以下操作:
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);
}
}
通过使用硬编码值调用setSeed()
,您将确保在每次运行时遵循相同的顺序。
答案 2 :(得分:0)
我不知道你如何生成随机数以及SingleRandom
对象是什么
但是在java中有一个Random
class => https://docs.oracle.com/javase/7/docs/api/java/util/Random.html
其中setSeed
方法:https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#setSeed(long)
以这样的方式工作:
它改变了这个随机数生成器对象的状态 处于完全相同的状态,好像刚刚用它创建的那样 论种子作为种子。
以下代码使用random
重置setSeed
个对象,并以这种方式生成两倍于相同的随机数流:
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