各ループ反復で異なる乱数を確保する
コードには、dh.setDoors を呼び出して 15 回反復する for ループがあります。 () 各反復で。 dh.setDoors() は srand(time(0)) を呼び出し、乱数ジェネレーターのシードを設定します。その後、乱数が必要になるたびに、carSetter = rand()%3 1 または Decider = rand()%2 1 を使用して乱数が生成されます。
ただし、carSetter と Decider の値はそのままであることがわかります。 15 回の反復を通じて同じです。これは、各反復の開始時に srand(time(0)) を呼び出すとシードが同じ値に設定され、その結果同じ一連の乱数が生成されるために発生します。
意図された動作は carSetter と反復ごとに異なる乱数を生成する決定器。これは、次のように、srand(time(0)) への呼び出しをループの外に移動することで実現できます。
srand(time(0)); for (int i = 0; i < 15; i++) { dh.setDoors(); }
これにより、srand(time(0)) が最初に 1 回だけ呼び出されるようになります。したがって、ループの各反復の前に新しい乱数シーケンスが生成されます。これにより、各ループで同じ擬似乱数が生成される問題が解決されます。
以上が各ループ反復で乱数が常に同じなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。