首頁 > 後端開發 > C++ > 為什麼多個 Random.Next 實例會傳回相同的值?

為什麼多個 Random.Next 實例會傳回相同的值?

Susan Sarandon
發布: 2025-01-24 23:31:09
原創
873 人瀏覽過

Why Do Multiple Random.Next Instances Return Identical Values?

了解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>
登入後複製
中的校正要在可能的輸出中包含1個。

>

以上是為什麼多個 Random.Next 實例會傳回相同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板