[C#] Random.Next始終返回相同的值


Answers

您正在創建一個非常靠近的新實例(您的循環非常緊密),因此每個實例都有效地使用相同的種子值。

更好的方法是創建一個實例並將其傳遞給Count方法。

你可能已經知道了下一點,但為了完整起見我會把它包含在這裡:

MSDN有關於此的詳細信息,但基本上您的問題是您正在使用的Random.Next方法生成:

大於或等於minValue且小於maxValue的32位有符號整數; 也就是說,返回值的範圍包括minValue但不包括maxValue。 如果minValue等於maxValue,則返回minValue。

因此,你的調用將返回-1或0。

Question

這個問題在這裡已有答案:

這真的很奇怪,我不明白為什麼會這樣。 在foreach循環中,我正在迭代A類集合,並且對於每個類,我調用Count()方法,其中r1r2數字是從範圍[-1,1]生成的。 問題是Random.Next為每個實例返回相同的“隨機”數字。 當第一個實例的結果為0和-1時,將從以下實例返回相同的結果。 拜託,你能告訴我為什麼會這樣嗎? 另外,我在每個A類實例中都得不到不同的結果。 這是代碼:

class a
{
 Random rnd = new Random();
 private void Count()
 {
  int r1 = rnd.Next(-1, 1);
  int r2 = rnd.Next(-1, 1);
 }
}
class b
{
 List<a> listofA=new list<a>();
 foreach (a ACLASS in listofA)
 {
  ACLASS.Count();
 }
}



您為每個A實例包含一個隨機實例。 聽起來他們都獲得了相同的默認種子值。 您可能希望為所有A實例創建靜態隨機並重複使用它,或者為A構造函數中的Random()實例提供種子值。




Links