第一种方法不指定随机种子,系统自动选取当前时间作为随机种子:
代码如下 | 复制代码 |
Random ro = new Random(); |
第二种方法可以指定一个int型参数作为随机种子:
代码如下 | 复制代码 |
int iSeed=10; |
这样可以保证99%不是一样。
时间短重复
2.利用种子生成不重复随机数
(a)生成随机数时:Random ran = new Random((int)DateTime.Now.Ticks);
代码如下 | 复制代码 |
ran .Next(minvale, maxvale); |
可以有效解决重复问题
PS: DateTime.Now.Ticks 为数据数的计时周期数
(b) Random random = new Random( GetRandomSeed( ) );//使用加密服务提供程序 (CSP) 提供的实现来实现加密随机数生成器 (RNG) s
代码如下 | 复制代码 |
tatic int GetRandomSeed( ) { byte[] bytes = new byte[4]; System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider( ); rng.GetBytes( bytes ); return BitConverter.ToInt32( bytes , 0 ); } 或者 Random sourceGen = new Random(new Guid().GetHashCode());//利用Guid |
3.利用延时运行时间解决重复问题
Thread.Sleep(100);
4.递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。
代码如下 | 复制代码 |
Random ra=new Random(unchecked((int)DateTime.Now.Ticks)); |
其它一些参考
1: 返回一个共有n位数,其中m位是小数的随机数
代码如下 | 复制代码 |
function randomXiao(n,m){
|
--------------------------------------------------------------------------------
可以用trace(randomXiao(3,2));实验一下。这个函数 简单。Math.pow(n,m)用于返回一个以n为底,m为指数的数。乘方!
# 2: 返回一个n到m之间的随机数
代码如下 | 复制代码 |
function randomNm(n,m){ |
--------------------------------------------------------------------------------
之所以用random(m-n+1)是因为随机数的范围是m-n,加上1使 得m也能在里面。加上n保证随机数以n为下限。
加上判断使函数更完整。另外,如果要返回一个负数随机数,也可以用randomNm(n,0);当 然,我想更一般的是用-random(n);
# 3: 返回一个字母
代码如下 | 复制代码 |
function randomAscii(){ |
--------------------------------------------------------------------------------
#4: 返回一个不区分大小写的随机字母
如果要返回大写,把if条件句去掉就行了。如果要返回小写,可以把条件句改为恒成立,或者 去掉条件,最后一句改为:
return c.toLowerCase(); String.fromCharCode(number)函数返回number代表数字的ASCII码。
toLowerCase()用于将大写字 母转为小写。
# 5: 返回一个n到m之间的k个互异随机数
代码如下 | 复制代码 |
|