的Java随机:播种问题
在想,如果你能帮助我:的Java随机:播种问题
我呼吁的方法initializeAll
:
public final void initializeAll() {
//other stuff........
rand = new Random(353);
}
所以我跑的项目和GUI弹出,有些操作执行。当我按下我的GUI中的“重置”按钮时,intializeAll
在同一个类对象上被再次调用。然而,现在执行的操作与以前不同,尽管它们应该是,因为这两次都是在新创建的Random
对象上使用353的种子。为什么这个区别?难道我做错了什么?
编辑:抱歉,它不是“执行一些操作”。其代理人口的一些初始化发生。每次初始化都不相同,尽管使用了相同的种子。
private static int [][] initializePop(Random rand) {
int[][] temp = new int[ROWS][COLS];
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLS; col++) {
temp[row][col] = rand.nextInt(12) - 5;
}
}
return temp;
}
SOLUTION:
对不起,你的时间家伙。我解决了这个问题。现在,我的应用程序是各种线程,swingworkers等乱糟糟的,即非常“thready”..显然,随机实际上工作正常。问题在于GUI显示,它显示了一些有趣的东西并显示出一些有趣的值。所以这更像是一个线程问题。我正在重新设计代码。所以再次感谢,并遗憾浪费你的时间。
对不起,你的时间家伙。我解决了这个问题。现在,我的应用程序是各种线程,swingworkers等乱糟糟的,即非常“thready”..显然,随机实际上工作正常。问题在于GUI显示,它显示了一些有趣的东西并显示出一些有趣的值。所以这更像是一个线程问题。所以再次感谢,并遗憾浪费你的时间。
我做错了什么?
是的,似乎是这样。 Random(long)
应该将种子重置为提供的值。无论错误是什么,我们都不可能在没有SSCCE或至少更多代码的情况下为您提供帮助。
Random rand = new Random(353);
System.out.println(rand.nextInt(10));
System.out.println(rand.nextInt(10));
System.out.println(rand.nextInt(10));
rand = new Random(353);
System.out.println(rand.nextInt(10));
System.out.println(rand.nextInt(10));
System.out.println(rand.nextInt(10));
输出:
7
5
5
7
5
5
感谢您的关注。这种重置确实发生,但它发生在运行之间,而不是在该项目的一次运行中发生。 – 2011-02-24 20:28:30
你确定initializeAll()方法实际上是在按下重置按钮时调用的吗? – Haakon 2011-02-24 20:31:01
@Haakon - (+1)这是我第一次猜测。或者,如果initializeAll()被调用,那么rand = new Random()语句会被触发吗? – JasCav 2011-02-24 20:35:35
@Haakon是的,它被称为。实际上停止跑步并做新的跑步会产生一致的结果。它只是在一次运行中,当按下“重置”时,会发生这种情况。 – 2011-02-24 20:38:58