c# random 问题高手进来看下

来源:百度知道 编辑:UC知道 时间:2024/07/04 07:50:24
int[] arr = new int[10];

for (int i = 0; i < 10; i++)
{
Random ran = new Random();
arr[i] = ran.Next(10);

}
foreach(int n in arr )
{
Console.WriteLine(n);

}
高人看下为什么产生的10个数字都一样的
调式的时候产生的是随机数字
可是直接运行的话 10个数字是一样的
是怎么回事高人看~

你可以使用Random(int Seed),不断的改变Seed,如以时间作为Seed
或是你可以使用这个
using System.Security.Cryptography;

RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();
byte[] randomNumber=new byte[1];
Gen.GetBytes(randomNumber);
Response.Write(randomNumber[0].ToString());
RNGCryptoServiceProvider 得到的随机比Random真一些

随机数的随机产生不同的数是需要不同的种子的,在Random ran = new Random(); 参数为空的情况下是以时间为种子的,但是机器运行速度太快的话,产生几个随机数的时间是在同一时间(具体以什么为单位我也不太清楚),所以产生的随机数是相同的
加一个函数:
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 ran = new Random(GetRandomSeed( ));

其实把Random ran = new Random();放for循环外面也可以解决问题
为什么?
我也不知道

Good Lucky!!