C#の乱数生成でつまづいた話
最近C#の学習中に乱数の生成でつまづいたので記事にしておく。
問題
ランダムな値を生成しようとすると同じ値が出力される。
使用したクラス:System.Randomクラス
具体的な状況
別々のインスタンスで乱数生成してみたら同じ値が出力された。
原因
System.Randomのコンストラクタはシード値を渡さないRandom()とシード値を渡すRandom(Int32)の二種類がある。Random()の場合にシード値として使われるSystem.Environment.TickCountがミリ秒単位のため、1ミリ秒以内に生成したRandom型は同じシード値で生成したことになり、乱数も同じものが生成されてしまう。
対処方法
1.公式(https://docs.microsoft.com/ja-jp/dotnet/api/system.random.-ctor?view=netframework-4.8)にある通り2秒間スリープさせる。
2.一つのRandomインスタンスを使う。
他にも色々ありそうですが、うまく違う値を出力することができました!
参考:
https://docs.microsoft.com/ja-jp/dotnet/api/system.random.-ctor?view=netframework-4.8
https://qiita.com/neko_the_shadow/items/72f0285324100a596979