|   
 UID1 威望1240 点 金钱24019 金币 点卡317 点 
 | 
 C# 随机数中碰到的问题以及解决方法
| Written by WALKERLEE|NEATStudio Date:2005-03-25 02:47 +0800
 由于某方面的需要。
 需要使用到随机数,所以查询了这方面的资料。
 Random复制代码 public int getFormatedNumeric(int min , int max){        int num = 0;        Random ro = new Random(unchecked((int)DateTime.Now.Ticks));        num = ro.Next(min, max);        return num;} 
表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。
 使用与时间相关的默认种子值,初始化 Random 类的新实例。
 DateTime.Ticks
 获取表示此实例的日期和时间的刻度数。
 备注:此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。
 unchecked
 unchecked 关键字用于控制整型算术运算和转换的溢出检查上下文。它可以按照下列形式用作运算符或语句。
 Random.Next (Int32, Int32)
 返回一个在(min,max)的指定范围内的随机数。
 备注:maxValue 必须大于或等于 minValue。
 在实际的运用中,发现如果使用上面写的随机数生成函数同时生成数个随机数时,会出现相同情况。
 s1,s2,s3 的值都是一样的。复制代码string s1,s2,s3, s4;                        s1 = getFormatedNumeric(0, 9).ToString();s2 = getFormatedNumeric(0, 9).ToString();s3 = getFormatedNumeric(0, 9).ToString();s4 = s1 + s2 + s3;MessageBox.Show(s4); 
经过Libra查询手册得出结论:默认随机数是由系统时间生成,在速度很快的机器上会出现相同随机数产生的情况。
 根据上面问题,我们对随机数产生函数进行修改。
 其中加入静态变量 roCount.
 再次执行,发现s1,s2,s3的值已经不相同。目的达到。复制代码public static int roCount = 0;                public int getFormatedNumeric(int min , int max){        int num = 0;        Random ro = new Random(unchecked(roCount * (int)DateTime.Now.Ticks));        num = ro.Next(min, max);        roCount++;        return num;} 
 | 
 
| 我是一个呼吸着现在的空气而生活在过去的人
 这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
 我已习惯了孤独,爱上孤独
 他让我看清了自我,还原了自我
 让我再静静的沉思中得到快乐和满足
 再孤独的世界里我一遍又一遍
 不厌其烦的改写着自己的过去
 延伸到现在与未来
 然而那只是泡沫般的美梦
 产生的时刻又伴随着破灭的到来
 在灰飞烟灭的瞬间我看到的是过程的美丽
 而不是结果的悲哀。。。
 
 |  |