手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >c# Random快速连续产生相同随机数的解决方案
c# Random快速连续产生相同随机数的解决方案
摘要:代码如下:复制代码代码如下:namespaceRandomTest{classProgram{staticvoidMain(string[]...

代码如下:

复制代码 代码如下:

namespace RandomTest

{

class Program

{

static void Main(string[] args)

{

for (int i = 0; i < 100; i++)

{

Random d = new Random();

Console.WriteLine(d.Next(100));

}

}

}

}

理论上而言,这个程序会产生100个不同的0~100的整数,而实际情况却是除了第一个数字不同外,剩余99个数字会产生随机的99个相同的数字!而在中间加入调试点或者用MessageBox.show()的方式却能正确的得到100个不同的随机数!

为什么这样?难道要暂停一下子?于是修改代码:

复制代码 代码如下:

namespace RandomTest

{

class Program

{

static void Main(string[] args)

{

for (int i = 0; i < 100; i++)

{

Random d = new Random();

Thread.Sleep(15);

Console.WriteLine(d.Next(100));

}

}

}

}

再次运行后,输出的数字终于随机了,而且15毫秒以上的暂停才会正常,如果只暂停1毫秒的话,会规律地出现连续5-6个一样的随机数,如果改成5毫秒的暂停的话,这种重复产生一样随机数的概率变成2-3个!

在网上苦苦搜索了2天,没什么帮助,而在CSDN论坛却很快有人给了解决方法:

复制代码 代码如下:

namespace RandomTest

{

class Program

{

static void Main(string[] args)

{

Random d = new Random();

for (int i = 0; i < 100; i++)

{

Console.WriteLine(d.Next(100));

}

}

}

}

把随机对象放在循环的外面就能解决问题!但还是没人能给个解释。估计果然是因为伪随机数的缘故,每次新产生随机种子的时候有时间的参与,所以才会在短时间内产生完全重复一致的“伪随机数”吧!

又及:网上看到一个提高随机数不重复概率的种子生成方法。

复制代码 代码如下:

static 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 random = new Random( GetRandomSeed( ) );

【c# Random快速连续产生相同随机数的解决方案】相关文章:

Linq to SQL Delete时遇到问题的解决方法

WebService出现"因 URL 意外地以 结束,请求格式无法识别"的解决方法

ASP.NET 2.0下随机读取Access记录的实现方法

asp.net(c#)两种随机数的算法,可用抽考题

iis 服务器应用程序不可用的解决方法

ASP.NET 多次提交的解决办法

asp.net图片上传生成缩略图的注意事项

asp.net C#检查URL是否有效的方法

.Net 如何限制用户登录的方法

asp.net中使用cookie传递参数的方法

精品推荐
分类导航