乱数ジェネレーター(RNG)は、ループを使用しているにもかかわらず、単一の一意の数字のみを生成しているようです。 デバッグはループの実行中に異なる数値を明らかにしますが、完了すると、すべての配列要素が同じ値を保持します。
問題は、各ループ反復内に新しいインスタンスを作成することに起因します。 Random
はシステムクロックを使用してシードされることが多いため、急速に実行されたループは、同じシードでRandom
オブジェクトを繰り返し初期化し、同一の出力につながる場合があります。
Random
ソリューション:単一の共有インスタンス
ここに補正されたRandom
関数:
RandomNumber
単一の
<code class="language-csharp">private static readonly Random random = new Random(); private static readonly object syncLock = new object(); public static int RandomNumber(int min, int max) { lock (syncLock) { // Thread-safe access return random.Next(min, max); } }</code>と同期することにより、RNGは内部状態を維持し、ループ内の各コールで一意の乱数を生成します。
以上が乱数ジェネレーターが1つの一意の数だけを生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。