栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c#的Random()随机函数特殊说明(随机函数的一个惊天特性)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c#的Random()随机函数特殊说明(随机函数的一个惊天特性)

 for (int i = 1; i < 6; i++)
            {

                Random ran = new Random(i);
                int RandKey = ran.Next(10000000, 99999999);
                int price = ran.Next(100, 200);
                string ISBN = RandKey.ToString();
                string pric = price.ToString();  
          ............
           }
一直以为Random()是任意无序变化的,实际不是的。今天做了代码测试,无意中发现Random()在特定时刻生成是固定的。
开始做了一个5次循环,Random()在循环里执行,循环特别快,5次的随机数是完全一样的,以为自己代码写的有问题,做了断点跟踪,发现结果不一样。为什么?
查了一下。原来Random()会取当前时间的毫秒数来作为种子,所以带时间间隔时候,每次执行种子都会不同,结果也就不一样。

public Random(int Seed);带参数的随机数,参数是一个种子,一个种子对应一个范围内的一个固定的随机数。
那种子和随机数之间的关系是什么呢?
随机函数产生的是一种伪随机数,它实际是一种序列发生器,有固定的算法,只有当种子不同时,序列才不同,如果把种子固定在程序中,那生成的随机数就会一直固定。

结论:随机函数分无参和有参,如果执行很快的循环,无参随机函数都在同一个毫秒内发生,结果是一样的!!!

如果想不一样的随机数,可以延迟1微妙!!!

 for (int i = 1; i < 6; i++)
            {

               Thread.Sleep(1);
                Random ran = new Random(i);
                int RandKey = ran.Next(10000000, 99999999);
                int price = ran.Next(100, 200);
                string ISBN = RandKey.ToString();
                string pric = price.ToString();  
          ............
           }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018162.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号