プログラミングで繰り返し乱数を理解して修正します
頻繁なプログラミングの問題には、同じ数を繰り返し出力する乱数ジェネレーター(RNG)が含まれます。 これは通常、RNGがループ内で複数回再開され、新しいインスタンスを作成するときに発生します。
Random
この問題を例で調べてみましょう:
デバッグは、各ループ反復中にさまざまな値を示す場合があります。ただし、ループの後にブレークポイントを設定すると、
<code class="language-csharp">public static int RandomNumber(int min, int max) { Random random = new Random(); // Problem: New instance each time return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }</code>配列内のすべての要素が同じ値を保持していることがわかります。
mac
ソリューション:単一のランダムインスタンス
根本的な原因は、ループ内で新しいオブジェクトを作成することです。 多くの場合、システムクロックを使用するためにシステムクロックを使用しているため、迅速な連続して複数のインスタンスを作成すると、同一の種子値、したがって繰り返される数字が得られます。
ソリューションはシンプルです。コード全体での単一の静的インスタンスを使用してください:Random
Random
マルチスレッドとスレッドの安全性Random
<code class="language-csharp">private static readonly Random random = new Random(); public static int RandomNumber(int min, int max) { return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }</code>マルチスレッドアプリケーションでは、共有
インスタンスにアクセスするには、人種条件を防ぐために同期する必要があります。 これは、ロックを使用して実現できます
以上が乱数ジェネレーターが同じ数を繰り返し生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。