2016-09-22 77 views
0

我使用下面的代碼來生成帶有種子的隨機數,這樣我下次可以生成相同的結果。Java隨機數在一天之後種子發生變化

int seed = 100;  
Random rand = new Random(seed); 

我設法返回從程序相同的結果在同一天,但一兩天後,我收到了完全不同的結果。我實施隨機種子的方式有問題嗎?任何人都遇到過這個?

+3

假設你使用'java.util.Random',你描述的是不可能的 - 對於給定的種子(在你的例子中爲100),'new Random(seed).nextXxx()'將總是返回相同的數字,以相同的順序...您可能已經改變了生成序列的種子或代碼。 – assylias

+2

這必須是觀察錯誤。同樣種子的「隨機」產生相同的數字序列;請參閱[JavaDoc](http://docs.oracle.com/javase/8/docs/api/java/util/Random.html)。這是確定性的。你實際上必須竭盡全力從計算機中獲得非確定性的隨機性。 (編輯:其實,你無法從計算機*中獲得它;我所考慮的例子實際上只是從外部源向外輸入計算機的隨機性,然後再修改爲機智,布朗探測器等) –

+1

搜索'新的隨機()' - 某處有一個雞蛋。最有可能的是算法改變了,如果我沒有記錯的話,一個額外的'random.nextInt(13);'特別是改變'nextInt(12)'到'nextInt(13)'已經改變了後面的數字。 –

回答

3

Javadoc舉例:

如果隨機的兩個實例使用相同的種子創建,並且方法相同的調用序列由對於每個,它們將生成並返回的數字相同的序列。

這真的取決於你如何使用該實例。它必須嚴格按照您所稱的方法進行。

這意味着問題出在調用Random實例上的方法的代碼中。調用方法的順序似乎取決於一些可以改變它的條件。