的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显示,它显示了一些有趣的东西并显示出一些有趣的值。所以这更像是一个线程问题。我正在重新设计代码。所以再次感谢,并遗憾浪费你的时间。

+1

你确定initializeAll()方法实际上是在按下重置按钮时调用的吗? – Haakon 2011-02-24 20:31:01

+0

@Haakon - (+1)这是我第一次猜测。或者,如果initializeAll()被调用,那么rand = new Random()语句会被触发吗? – JasCav 2011-02-24 20:35:35

+0

@Haakon是的,它被称为。实际上停止跑步并做新的跑步会产生一致的结果。它只是在一次运行中,当按下“重置”时,会发生这种情况。 – 2011-02-24 20:38:58

对不起,你的时间家伙。我解决了这个问题。现在,我的应用程序是各种线程,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 
+0

感谢您的关注。这种重置确实发生,但它发生在运行之间,而不是在该项目的一次运行中发生。 – 2011-02-24 20:28:30