循环迭代中的随机数重复
考虑以下问题:在运行 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) 在整个循环中保持不变,因此会生成相同的随机数序列。
解决问题
要解决此问题,建议:仅在程序开始时而不是在每次循环迭代中初始化随机数生成器一次。这确保了每次循环迭代使用不同的随机数序列。
修改后的实现将类似于以下内容:
srand(time(0)); // Call srand() once at the start of the program while (...) { x = rand(); y = rand(); }
通过此修改,x 和 y 的值将在循环迭代,产生不同随机数序列的所需行为。
以上是为什么随机数在循环迭代中重复?的详细内容。更多信息请关注PHP中文网其他相关文章!