[C#] Random.Next總是返回相同的值


Answers

你正在創建一個Random非常接近的新實例(你的循環非常緊湊),所以每個實例都有效地使用相同的種子值。

更好的方法是創建一個實例並將其傳遞給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時,以下實例將返回相同的結果。 請你能告訴我為什麼會這樣嗎? 另外,我不能在每個類的實例中獲得不同的結果。 這是代碼:

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()實例提供種子值。