2010-12-07 9 views
1

重複の可能性:
Why does it appear that my random number generator isn't random in C#?
Random number generator not working the way I had planned (C#)なぜこの乱数ジェネレータはランダムではありませんか?

私はランダムな値を計算するために、このメソッドを持っている:それは私の中で、常に同じ番号を返ししかし

private double getMetrics(SourceFile sf) 
     { 
      Random r = new Random(); 
      return (r.NextDouble()); 
     } 

をケース0.41500350386603

なぜ????

+2

これは、毎回それを再初期化するためです。宣言とインスタンス化コードを別の場所に移動します。 – shahkalpesh

+0

はい、ただしそれでもJavaでこれを行うと、乱数が生成されます –

+1

Javaのランダムクラスは別の仕様を持つ必要があります。 – Rup

答えて

9

new Random()は、現在時刻をシード値として使用します。したがって、この関数を非常に短い時間間隔で複数回呼び出す場合、同じ値が返される可能性があります。 MSDNの説明は次のとおりです。

デフォルトのシード値はシステムクロックから得られ、有限の解像度です。その結果、デフォルトコンストラクタの呼び出しによって連続して作成される異なるRandomオブジェクトは、同じデフォルトのシード値を持つため、同じ乱数セットが生成されます。この問題は、単一のRandomオブジェクトを使用してすべての乱数を生成することで回避できます。

0

メソッドのRandomを宣言するだけで、メソッドを呼び出すたびに、削除されて再作成されない限り、新しい番号が作成されます。再作成すると、数字は開始時と同じようになります。 「より多くの」一意の数字が必要な場合は、乱数を作成する前に数ミリ秒待たせることができます。非常にユニークな数字が必要な場合は、Guidが優れています。

関連する問題