• .net random伪随机数


    .net中的Randome类可以用于获取随机数,但并非真正意义上的随机,缺点有二:

    当种子相同时,生成的随机数列一定是相同的,默认用的是当前系统启动后的毫秒数为种子;

    生成的随机数列很有可能有重复,也就是所有随机数出现的概率并不完全相同;

    比如:

    View Code
    Random mr = new Random(10);
                for (int s = 0; s < 10; s++)
                {
                    Console.WriteLine(mr.Next(10));
                }
                Console.WriteLine("-----");
                mr = new Random(10);
                for (int s = 0; s < 10; s++)
                {
                    Console.WriteLine(mr.Next(10));
                }

    执行结果为:

    为避免以上两个问题,有如下几种方案:

    1、
    Random 类是根据CPU的时钟来产生随机数,如果间隔时间太短有时是会产生相同的随机数,
    可以通过暂停下Thread.sleep(6); 
    2、
    可以通过设置一个List列表,判断,如果已经有这个数字,则重新生成;否则,添加到List中
    private List<int> GetRndCode(int codeLength) 
            {
                List<int> rndLst = new List<int>();
                int temp = 0;
                int chr=0;
                Random rnd = new Random();
                while (temp < codeLength)
                {
                    chr = rnd.Next(100);
                    if (!rndLst.Contains(chr))
                    {
                        temp++;
                        rndLst.Add(chr);
                    }
                }
                return rndLst;
            }
    有可能会耗时很长。是否会死循环。不确定。
    3、如果有一定的时间间隔的话,也可以通过使用Random rd = new Random(DateTime.Now.Millisecond)来达到随机数的目的。
    4、网络上有人提议用:Random rd = new Random(Guid.NewGuid().GetHashCode()) 说是可以生成不重复的随机数。<不能确定是否正确,但是NewGuid()是肯定不会重复的。>
    总结:个人认为第二种方法是最好的。 计算机运行效率越来越高,同时运行的可能性很大。时间的操作不确定性很高。

  • 相关阅读:
    通过IP获取所在城市
    一次完整的HTTP请求过程
    Array.prototype.slice.call(arguments)
    移动web资源整理
    Null 和 Undefined
    JS正则表达式
    JavaScript和JSP的区别?
    JS判断图片上传时文件大小和图片尺寸
    JavaScript中的callee与caller的区别
    php结合redis实现高并发下的抢购、秒杀功能
  • 原文地址:https://www.cnblogs.com/Finding2013/p/3014583.html
Copyright © 2020-2023  润新知