Random 随机数

随机数很简单,C#中的随机数会自动的取时间戳来做为随机因子,但是程序的运行是很快的,一秒钟内可以做很多事的, 这样反而会出现了重复随机数!

当然,用Thread.Sleep(2)来解决问题,很多时候,这个方法是适用的。

但我现在有四万个记录要处理,每个人一天打四次卡,大家算算就会发现,四(万*四)这个时间就太长了!

后来我用了一招把就是把时间戳

...

 int randomsheet = uncheck((int)DateTime.Now.Ticks);

Random rd = new Random(randonsheet);

...

随机完后,我手动的加1

...

randomsheet = randomsheet+1;

if(randonsheet==int.MaxValue)

{

int randomsheet = uncheck((int)DateTime.Now.Ticks)

}

...

但是这样经常会出现2到4个随机数出现了连号!

这不行!因为这个随机数用来作打卡时间(分钟部分)的,太有规律这完全不行嘛!

后来我改成了这样:

private string _Random(int imin, int imax, ref int RandomSeet,ref long dtt)
        {
            if (DateTime.Now.Ticks != dtt)
            {
                RandomSeet = int.Parse(dtt.ToString().Substring(dtt.ToString().Length - 9));
                dtt = DateTime.Now.Ticks;
            }
            else
            {
               RandomSeet = RandomSeet+1;               
            }
            if (RandomSeet == int.MaxValue)
            {
                RandomSeet = int.Parse(dtt.ToString().Substring(dtt.ToString().Length - 9));
            }
            Random r = new Random(RandomSeet);
            int nran = r.Next(imin, imax);
            if (nran < 10)
                return "0" + nran.ToString();
            else
                return nran.ToString();
        }

因为我发现用unchecked截的数据怪怪的,而时间戳最主要的是分跟秒,所以我手取了后面的9位数。

这样一来随机数有所好转,但是明显还是可以看得出一定的规律来,不同的人打卡时间会有一定的相似!

后来想了想,每次加1,这个数太近了!问题就出在这里,

所以我把加1改成了如下:

if (RandomSeet % 2 == 0)
                {
                    RandomSeet = RandomSeet + 3;
                }
                else
                {
                    RandomSeet = RandomSeet + 4;
                }

终于OK,以前没想过一个好的随机数都这么烦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值