首頁 > 後端開發 > C++ > 為什麼我的C#隨機數生成器會在多個對像上產生相同的序列?

為什麼我的C#隨機數生成器會在多個對像上產生相同的序列?

Patricia Arquette
發布: 2025-01-24 23:26:09
原創
361 人瀏覽過

Why Does My C# Random Number Generator Produce the Same Sequence Across Multiple Objects?

理解 C# 中的隨機數產生並避免序列重複

本文解決了 C# 中的一個常見問題:Random 類別的多個實例產生相同的隨機數序列。 Random 類別雖然設計用於產生看似不可預測的數字,但其內部演算法依賴種子值。 如果快速連續建立多個 Random 對象,它們通常會收到相似的種子值(通常基於系統時鐘),從而產生相同的輸出序列。

問題:多 Random 實例

為每個需要隨機數的物件建立一個新的 Random 實例是根本原因。 由於種子值非常接近,因此產生的序列幾乎相同。

解:單一共用Random實例

解決方案很簡單:建立一個 Random 實例並在所有需要隨機數的物件之間共用它。 這確保每個物件都從相同的、不斷演變的序列中繪製,從而防止重複問題。

以下是使用靜態成員實現此功能的方法:

<code class="language-csharp">class A
{
    private static readonly Random rnd = new Random(); // Static, read-only instance

    public void Count()
    {
        int r1 = rnd.Next(-1, 1);
        int r2 = rnd.Next(-1, 1);
    }
}

class B
{
    List<A> listOfA = new List<A>();

    public void DoSomething()
    {
        foreach (A aClass in listOfA)
        {
            aClass.Count();
        }
    }
}</code>
登入後複製

透過使用 static readonly 字段,我們確保單一 Random 實例建立一次並在類別 A 的所有實例之間共用。這消除了重複種子值的風險,並保證每次呼叫rnd.Next()都有唯一的隨機數序列。 這種方法為每個 A 物件產生真正隨機且不同的序列。

以上是為什麼我的C#隨機數生成器會在多個對像上產生相同的序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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