首页 > 后端开发 > C++ > 为什么我的C#随机数生成器会在多个对象上产生相同的序列?

为什么我的C#随机数生成器会在多个对象上产生相同的序列?

Patricia Arquette
发布: 2025-01-24 23:26:09
原创
323 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板