循環迭代中的隨機數重複
考慮以下問題:在運行15 次迭代的循環中,dh.setDoors() 方法被稱為。在 setDoors() 中,呼叫 srand(time(0)) 來設定隨機數產生的種子。隨後,使用 carSetter = rand()%3 1 或 Decisionr = rand()%2 1 等表達式產生隨機數。
監視 carSetter 和 Decisionr 的值表示它們在每次循環迭代中保持不變,但在不同的循環運行之間進行更改。此行為是意外的,因為循環涉及 15 次獨立迭代,表明每個隨機值應該有所不同。
調查原因
問題源自於 srand( 的放置time(0)) 在每次迭代開始時。透過在每次循環中重置種子,偽隨機數序列由迭代中的常數 time(0) 值有效地固定。由於 time(0) 在整個循環中保持不變,因此會產生相同的隨機數序列。
解決問題
要解決此問題,建議:僅在程式開始時而不是在每次循環迭代中初始化隨機數產生器一次。這確保了每次循環迭代使用不同的隨機數序列。
修改後的實現將類似於以下內容:
透過此修改,x 和 y 的值將在循環迭代,產生不同隨機數序列的所需行為。
以上是為什麼隨機數在循環迭代中重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!