2017-02-19 4 views
1

リスト(strLabel)からランダムな文字列を選択する3つの乱数を生成しようとしていますが、同じ組み合わせが得られます。同じ数字を繰り返すのを止める方法はありますか?Visual Studioで繰り返しパターンなしの乱数を取得するにはどうすればよいですか?

Random r = new Random(); 
int iSelect3 = r.Next(0, 35); 
textBox3.Text = strLabel3[iSelect3]; 

私は数字の同じ組み合わせを得続けているので、「もっとランダム」なものを使いたいと思います!異なるランダムオブジェクトと同じシード値を与える

答えて

0
Random r = new Random((int) DateTime.Now.Ticks & 0x0000FFFF); 
Thread.Sleep(20); // Apply an algorithm to differentiate the seed value in each invocation, or call the Thread.Sleep method to ensure that you provide each constructor with a different seed value. 
int iSelect3 = r.Next(0, 35); 
textBox3.Text = strLabel3[iSelect3]; 

は、乱数の同一の配列を生成するために各インスタンスを引き起こします。これは、乱数ジェネレータに依存するアプリをテストするときによく行われます。 アプリケーションで異なる乱数シーケンスが必要な場合は、このコンストラクタを異なるシード値で繰り返し呼び出します。ユニークなシード値を生成する1つの方法は、シード値を時間に依存させることです。たとえば、Random()オーバーロードが行うように、シード値をシステムクロックから派生させます。ただし、このコンストラクタを異なるシード値で別々に呼び出すには、システムクロックで十分な解像度が得られないことがあります。これにより、次の例の最初の2つのRandomオブジェクトで示されるように、擬似乱数の同じシーケンスを生成する乱数ジェネレータが生成されます。これを防ぐには、各呼び出しでシード値を区別するアルゴリズムを適用するか、Thread.Sleepメソッドを呼び出して、各コンストラクターに異なるシード値を指定するようにします。

あなたはMSDN

ランダムクラスについての詳細を学ぶことができます
関連する問題