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

44 篇文章 1 订阅

 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();  
          ............
           }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术与企业应用结合的爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值