有个问题一直搞不懂,随机数的种子到底是做什么的     比如 Random random=new Random(5);          int num=random.bext();          这个num就一直不变    这是什么回事呢,知道的请留言。tks

解决方案 »

  1.   

    因为这叫伪随机数,根据一个常量,每次的结果定然一样的,实际上当算法固定后,输出的结果是已知固定的。所以你固定是5,结果总是一样的,你可以定义到函数外,作为成员变量,初始化后,每次获得的就不同了。但每次软件运行第n次总是和下次软件运行一致,所以你可以用当前操作系统启动的时间戳来做种子,相对来说会算是随机。
    Random random=new Random(Environment.TickCount);
      

  2.   

    计算机不可能产生完全随机的数字。所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的
    无重复
    Random rand = new Random(Guid.NewGuid().GetHashCode()); 
      

  3.   

    要想真正理解这个问题你得先了解何为随机数、何为伪随机数及伪随机数算法....你得去补习高等数学...NET的随机数算法采用Donald Knuth的减随机数生成器算法...随机数的生成是从种子值开始,如果反复使用同一个种子,就会生成相同的数字系列...对于Random类,如果未指定种子值,则采用当前系统时钟值为种子...
      

  4.   

    刚也去看了看msdn,怎么感觉好像写错了啊。如果每次用系统时钟来初始化,为啥每次默认的无参构造函数创建的Random生成结果都一样?没太看懂。
      

  5.   


    要sleep(1)的,不然系统时间没更新
      

  6.   

    LZ把Random random=new Random(5);这里面的5去掉就可以了,
    5是随机种子,你确定了种子,随机数就不变了。