2011-04-27 130 views
3

我需要測試一個Java程序20次,並需要設置隨機種子,以便可以重複測試。如果我將初始種子設置爲0,然後在每次運行時增加1(即1,2,3等),這種方法是否仍然能確保完全的隨機性,儘管種子並不相距太遠?Java隨機種子

謝謝

+0

或者生成的隨機數是否接近/相似? – badcoder 2011-04-27 04:01:38

+0

每次運行測試都有相同的隨機種子?爲什麼麻煩地稱它是隨機的,它只是一顆種子。 – Gressie 2011-04-27 05:38:03

回答

1

爲什麼不直接使用當前時間作爲種子?即System.currentTimeMillis()

+0

,因爲我需要重複測試 – badcoder 2011-04-27 04:04:47

+0

讓我重新解釋我的答案。如果您需要用相同的隨機數序列重複測試20次,那麼您將需要使用相同的種子。否則,您可以使用當前時間作爲種子。也許我沒有正確理解你的問題? – ryanprayogo 2011-04-27 04:07:53

0

你需要一個數字或字符串嗎?當我需要字符串時,我使用UUID.randomUUID().toString()爲我的測試獲取UUID,但如果您需要一個數字,則可以使用System.nanoTime()

6

任何種子將提供與Java中包含的標準PRNG一樣的任何其他種子的隨機性。所以使用增量種子進行測試是很好的。

雖然您可能想要考慮使用更好的隨機數生成器。如果您將值作爲圖像呈現(我無法親自找到參考,但我記得它很明顯),那麼Java中包含的那個會產生明顯的重複模式。我建議Mersenne Twister(有Java versions)作爲一種替代品,速度很快,並且有很長的一段時間,所以你不會輕易看到模式。

+0

謝謝,那正是我需要知道的! – badcoder 2011-04-27 04:08:02

+0

沒問題。我更新了關於如何獲得更好的隨機性的答案,如果你關心它的話。無論哪種方式,您都可以使用遞增種子進行測試,或者甚至可以使用一系列隨機數(從固定種子生成)作爲種子進行每次迭代:) – WhiteFang34 2011-04-27 04:25:18

+1

http://www.alife.co.uk/非隨機/ - 這是小程序 – Rekin 2011-04-27 06:10:46

2

如果使用0的種子,隨機數序列將從該點開始重複。如果你想要一個不同的序列,你只需要使用一個不同的隨機種子。即您應該能夠在每次測試中設置一次種子。