C#で乱数を生成する際、同じ数しか出ないという事態に直面

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

スポンサーリンク

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

目次

はじめに

C#で、乱数を発生させようとしても、同じ数字が出力される。

なぜ、ランダムに乱数が発生してくれない?

※この記事を書いている人間はC#の初心者なので、以下で書いていること全て正しいという保証はできない

※Visual Studio 2015でプログラムを動かしている

C#での乱数発生

失敗例

0~9までの乱数を発生させるを100回行うプログラム

 

結果

rand1-1

 

常に同じ数字(数字の6)が出力される

ちなみに繰り返しを100回から2000回に増やすと以下のような結果となった。

rand1-2-1

c#の乱数は、時間を参照しているらしい。(参照している時間は、たぶん、PCの起動時間)

乱数が参照している時間が変化するよりも早く、forのループ文が回ると、その間の結果は変わらないのだろう。

成功例

次は

の部分をfor文の外で宣言する

結果

rand1-2

なんだか、それっぽい乱数を得られた。

もう一度実行してみると結果が変わるrand1-3

乱数を発生させようとするたびに、乱数用のインスタンスを新たに生成するのがまずかったのだろう。

for文の中に、インスタンスを生成すると、常に1回目の乱数生成することになる。

一方で、インスタンスを生成する部分をfor文の外に追い出すと、乱数を1度発生させた後、そのことを受けて、次の乱数を発生させるのだと考えられる。

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

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

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

     

コメント

  1. シコイド より:

    んあ!めちゃめちゃ参考になります!ありがとうございます!

シコイド へ返信する コメントをキャンセル

*

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