for (int i = 1; i < 6; i++)
{
Random ran = new Random(i);
int RandKey = ran.Next(10000000, 99999999);
int price = ran.Next(100, 200);
string ISBN = RandKey.ToString();
string pric = price.ToString();
............
}
一直以为Random()是任意无序变化的,实际不是的。今天做了代码测试,无意中发现Random()在特定时刻生成是固定的。
开始做了一个5次循环,Random()在循环里执行,循环特别快,5次的随机数是完全一样的,以为自己代码写的有问题,做了断点跟踪,发现结果不一样。为什么?
查了一下。原来Random()会取当前时间的毫秒数来作为种子,所以带时间间隔时候,每次执行种子都会不同,结果也就不一样。
public Random(int Seed);带参数的随机数,参数是一个种子,一个种子对应一个范围内的一个固定的随机数。
那种子和随机数之间的关系是什么呢?
随机函数产生的是一种伪随机数,它实际是一种序列发生器,有固定的算法,只有当种子不同时,序列才不同,如果把种子固定在程序中,那生成的随机数就会一直固定。
结论:随机函数分无参和有参,如果执行很快的循环,无参随机函数都在同一个毫秒内发生,结果是一样的!!!
如果想不一样的随机数,可以延迟1微妙!!!
for (int i = 1; i < 6; i++)
{
Thread.Sleep(1);
Random ran = new Random(i);
int RandKey = ran.Next(10000000, 99999999);
int price = ran.Next(100, 200);
string ISBN = RandKey.ToString();
string pric = price.ToString();
............
}