2017-05-30 8 views
0

メソッドから乱数を返そうとしています。私のコードは動作しますが、それは乱数を返しますが、同じwhileループで2回使用すると同じ番号が返されるという問題があります。どのように問題を解決しますか?問題の修正がある場合。クラススコープにメソッドのスコープのうちC#はwhileループで2回乱数を返します

var randomNumber = new Random(); 

: -

この

private int ReturnARandomNumber(int min, int max) 
{ 
    var randomNumber = new Random(); 
    return randomNumber.Next(min, max); 
} 

のような私のコードを見モルテンのsyhler

+0

あなたが呼び出すたびに新しいランダムを作成しないでください。 – pm100

+0

必ずしも速く呼び出されるとは限りません。 – TaW

+0

あなたはランダム変数を静的変数にすることができます。そのため、インスタンス間で使用されると、クラスインスタンスごとに乱数も異なります。 – Droa

答えて

2

あなたが宣言を移動する必要があり

var randomNumber = new Random(); 
private int ReturnARandomNumber(int min, int max) 
{ 
    return randomNumber.Next(min, max); 
} 
+0

すごく感謝してくれてありがとう!それは働いた:) –

+0

あなたはなぜこの作品が説明する必要があります。 – Enigmativity

-1

乱数の生成に使用されるedは、現在の時間に基づいています。あなたの場合の周りの1つの方法は、Randomを関数内のパラメータにすることです、あなたのループの外でそれを初期化することができます。

1

毎回新しいランダムオブジェクトを作成しないでください。 Randomは、デフォルトのシードとして現在の時刻を使用します。タイトなループでその関数を頻繁に呼び出すと、後続の呼び出しで同じシード値を取得します。 Randomは、一定期間にわたって同じオブジェクトを再利用する場合に最も効果的です。

private Random randomNumber = new Random(); 
private int ReturnARandomNumber(int min, int max) 
{  
    return randomNumber.Next(min, max); 
} 
関連する問題