首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么随机范围每次都给出相同的输出值?

问为什么随机范围每次都给出相同的输出值?
EN

Stack Overflow用户
提问于 2022-07-04 05:10:06
回答 1查看 68关注 0票数 -1

下面是我用来实现随机类的代码

代码语言:javascript
复制
class Program
{
    public static void Main()
    {
        for (int j = 0; j < 5; j++)
        { 
            foreach (var item in GenerateRandomList(new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }))
                Console.Write(item + " ");
            Console.WriteLine(" ");
        }

    }
    public static List<int> GenerateRandomList(List<int> arr)
    {
        var random = new Random(new Random().Next(1,10000));
        var ls = new List<int>();
        while(arr.Count>0)
        {
            var index = random.Next(0, arr.Count-1);
            ls.Add(arr[index]);
            arr.RemoveAt(index);
        }
        return ls;
    }
}

下面是我得到的结果

代码语言:javascript
复制
first time
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0

second time
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0

third time 
9 2 4 8 1 6 3 5 7 0
9 2 4 8 1 6 3 5 7 0
9 2 4 8 1 6 3 5 7 0
9 2 4 8 1 6 3 5 7 0
7 1 3 6 5 2 8 9 4 0

and So on..

我遗漏了什么?有时,它给出不同的结果,但它再次开始重复以前的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-04 05:15:20

new Random()使用默认种子创建一个新的随机数生成器实例。

在.NET框架中,默认的种子值与时间有关.在.NET核心中,默认的种子值由线程静态伪随机数生成器产生.从文档中,如果相同的种子用于单独的随机对象,它们将生成相同的随机数序列。

如果默认的种子是基于时间的,并且快速地创建五个Random对象,那么每个生成器都会得到相同的种子(因为时间不太精确,每条指令都在不同的时间戳上执行),从而产生相同的伪随机数序列。

您将只希望创建一个Random实例一次;例如,作为一个类字段。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72852004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档