2011-02-24 66 views
1

在想,如果你能幫助我:的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

回答

0

對不起,你的時間傢伙。我解決了這個問題。現在,我的應用程序是各種線程,swingworkers等亂糟糟的,即非常「thready」..顯然,隨機實際上工作正常。問題在於GUI顯示,它顯示了一些有趣的東西並顯示出一些有趣的值。所以這更像是一個線程問題。所以再次感謝,並遺憾浪費你的時間。

2

我做錯了什麼?

是的,似乎是這樣。 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