首页 > 后端开发 > C++ > 为什么多个 Random.Next 实例返回相同的值?

为什么多个 Random.Next 实例返回相同的值?

Susan Sarandon
发布: 2025-01-24 23:31:09
原创
872 人浏览过

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>
登录后复制

通过将共享的 _rnd 实例注入到 A 类构造函数中,每个 A 实例都使用相同的随机数生成器,保证所有实例中的随机数不同。 请注意 Next(-1,2) 中的更正,以在可能的输出中包含 1。

以上是为什么多个 Random.Next 实例返回相同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板