c# Random快速连续产生相同随机数的解决方案
来源:互联网 发布:linux访问网页命令 编辑:程序博客网 时间:2024/05/18 03:40
在写数独基类的时候为了产生随机数的时候遇到奇怪的问题
详细出处参考:http://www.jb51.net/article/17406.htm
代码如下:
复制代码 代码如下:
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快速连续产生相同随机数的解决方案
- c# Random快速连续产生相同随机数的解决方案
- c# Random快速连续产生相同随机数的解决方案
- c# Random快速连续产生相同随机数的解决方案
- c# Random快速连续产生相同随机数的解决方案
- Random 快速连续产生不相同随机数的解决方案
- Random快速连续产生相同随机数
- .Net中关于Random类产生的随机数相同问题解决
- Random频率太快,产生的随机数相同?
- 使用VS2005 C#编写随机数Random算法的代码(适用于连续产生随机数,重置后不适用)
- 产生连续的随机数
- c#随机数的产生(random类的使用)
- 提高c#随机数random产生随机函数的…
- C# Random对象短时间内产生不重复的随机数
- Random产生随机数与Math.random()产生随机数的比较
- Random:产生随机数的类
- * Random:产生随机数的类 *
- Random:产生随机数的类
- linux中fork()函数解析
- Java中接口与抽象类的异同点
- RTC杂谈
- C++静态类型总结[百度文库文档]
- Linux下获得线程ID
- c# Random快速连续产生相同随机数的解决方案
- 怎么学习oracle浅析
- python多线程
- HTML5与window.JSON
- C++ const 和 static 用法
- centos 安装eclipse编写C/C++程序
- ubuntu sun-java6-jdk源
- forlong401的专栏 反编译、安全、网络、NDK、BT、MMS、面试
- Two Security Models in Oracle EBS:Function Security + Role-Based Access Control