Random クラスを使用して乱数を生成する方法(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

乱数の生成法

C#には、乱数を生成するためにSystem.Random クラスが用意されています。

ソースコード

 

実行結果

Next()の場合
1262663867
28650712
935573006
303305155
281132603
————————-
Next(1,10)の場合
2
8
2
6
5
————————-
Next(100)の場合
36
98
69
5
3
————————-
NextDouble()の場合
0.290854684678304
0.346791863602955
0.894016728687108
0.655401655312349
0.345866789736723
————————-

System.Random クラスをインスタンス化する時は、通常のクラス同様newを使用します。

System.Random クラスには以下のようなメソッドがあります。

Next();0 以上のランダムな整数
Next(int minValue, int maxValue); minValue 以上で maxValue 未満のランダムな整数
Next(int maxValue); 0 以上でmaxValue 未満のランダムな整数
NextDouble();0.0 以上 1.0 未満のランダムな倍精度浮動小数点数

注意点
・Nextメソッドで生成できる乱数の範囲はint型の範囲です。(int型の最大値は約21億です)。
・Next(int minValue, int maxValue)で指定した時に、maxValueの乱数は生成されません。説明にも書いた通り、minValue 以上で maxValue 「未満」です。「以下」ではありません。そのため、乱数の実質的な範囲はminValue~maxValue-1となります。例えばNext(1, 10)と書いて乱数を生成した時、1~10の乱数でなく、1~9の乱数が生成されます。

シード(seed)値

乱数を生成するには、シード(seed)値を指定する必要があります。

※seedは英語で「種」です。シード(seed)値は、乱数を生成するための種といえるでしょう。

乱数を生成する時に、シード(seed)値を指定することができます。シード(seed)値が固定だと常に同じ乱数を生成します。

以下の例では、シード(seed)値が10,20,10の場合を扱っています。1回目と3回目のシード(seed)値が10の場合に注目すると、生成される乱数は時間が経過しても変化しないことがわかります。

ソースコード

 

実行結果

シード(seed)値が10の場合
9777734529635793129223757958328133223216258426762563852613177521169358982316534129776628152123874736
————————-
シード(seed)値が20の場合
2778318556114895342157416421126745666173836554271877262437289843137934936922286334925867323889418352
————————-
シード(seed)値が10の場合
9777734529635793129223757958328133223216258426762563852613177521169358982316534129776628152123874736
————————-

シード(seed)値を指定しない場合は、時間に応じて決定される既定のシード値が使用されます。

正確に言えば、EnvironmentクラスのTickCountの値をシード(seed)値として使用しています。

TickCountは、パソコンが起動してから経過した時間(ミリ秒)をint型で返します。

そのため、シード(seed)値を固定した時と違い、「Random r = new Random();」で指定したrの値は、実行するたびに結果が変わります。

以下のソースコードは、非常に細かい時間の間に、System.Randomクラスを何度もインスタンス化しています。その結果、乱数の生成は何度もリセットされています。

シード(seed)値が変わった時に、生成される乱数が変わることがわかります。

ソースコード

 

実行結果

6459192713358060274595570584952863523168321801217272088097950775059454600627476837677988542521754575
seedの値は207531312
————————-
9163393712108380969704235864441007195149562652643365600493852936009029482013267312008639769229663654
seedの値は207531328
————————-
9163393712108380969704235864441007195149562652643365600493852936009029482013267312008639769229663654
seedの値は207531328
————————-
9163393712108380969704235864441007195149562652643365600493852936009029482013267312008639769229663654
seedの値は207531328
————————-
9163393712108380969704235864441007195149562652643365600493852936009029482013267312008639769229663654
seedの値は207531328
————————-
9163393712108380969704235864441007195149562652643365600493852936009029482013267312008639769229663654
seedの値は207531328
————————-
7515100398171233293501750456557011350304188344768332510686564374016987399842241568821449077373970422
seedの値は207531343
————————-
7515100398171233293501750456557011350304188344768332510686564374016987399842241568821449077373970422
seedの値は207531343
————————-
7515100398171233293501750456557011350304188344768332510686564374016987399842241568821449077373970422
seedの値は207531343
————————-
7515100398171233293501750456557011350304188344768332510686564374016987399842241568821449077373970422
seedの値は207531343
————————-

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

     

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)