了解C#中相同的隨機數產生相同的隨機數生成
使用類別的多個實例在循環中產生隨機數時,您可能會觀察到>反覆產生相同的值。這種行為源自於Random.Next()
類別函數的方式。 Random
類別依賴種子值來啟動其偽隨機數序列。 如果快速連續創建多個Random
的實例,它們通常會收到非常相似的種子值,從而產生相同的輸出序列。
Random
為了克服這一點,而不是為每個類別物件建立一個新的實例,而是建立一個
實例並在類別的所有實例中共用。 這樣可以確保每個實例從相同的,隨機數的演變序列中繪製。這是一個改進的範例,證明了這種方法:Random
Random
實例注入
>類別建構函數,每個實例使用相同的隨機數產生器,可以保證在所有實例中都有不同的隨機數。 請注意,<code class="language-csharp">public class A { private readonly Random _rnd; public A(Random rnd) { _rnd = rnd; } public void Count() { int r1 = _rnd.Next(-1, 1); // Note: Next(-1, 1) will only return -1 or 0. To get -1, 0, or 1, use Next(-1, 2) int r2 = _rnd.Next(-1, 2); // Corrected to include 1 } } public class B { private readonly List<A> _listOfA = new List<A>(); private readonly Random _rnd = new Random(); public B() { // Populate _listOfA... (Example below) for (int i = 0; i < 10; i++) { _listOfA.Add(new A(_rnd)); } } public void Process() { foreach (var aClass in _listOfA) { aClass.Count(); } } }</code>
>
以上是為什麼多個 Random.Next 實例會傳回相同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!