解决for循环里面产生相同随机数的问题

一般使用Random ra=new Random();就可以。。


但是如果应用在一个FOR循环中,取到的多个随机值就基本相同了。原因如下:


用系统时间做随机种子并不保险,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值


可能相同

 


解决思路: 循环体中加Thread.Sleep(1);
----------
这样就使得循环中的时间不同了,然后取Ticks,截取后9位为INT做种子,保证每次种子不同,可取到随机值 。。


  Thread.Sleep(1);
     long tick = DateTime.Now.Ticks;//一个以0.1纳秒为单位的时间戳,18位
    int seed = int.Parse(tick.ToString().Substring(9)); //  int类型的最大值:  2147483647

 

 

-------

 


 for (int i = 0; i < 20; i++)
        {
        
            Thread.Sleep(1);
            long tick = DateTime.Now.Ticks;//一个以0.1纳秒为单位的时间戳,18位
            int seed = int.Parse(tick.ToString().Substring(9)); //  int类型的最大值:  2147483647
            //或者使用unchecked((int)tick)也可
            Random ran = new Random(seed);


            int iResult;
            int iUp = 100;
            int iDown = 50;
            iResult = ran.Next(iDown, iUp);
            Response.Write(iResult + "<p>");
            Response.Write(   seed.ToString() + "---" + unchecked((int)tick) + "<p>");
        }

阅读更多
换一批

没有更多推荐了,返回首页