c#随机产生数字

来源:百度知道 编辑:UC知道 时间:2024/06/08 08:07:22
int a=0;
do
{
Random random = new Random();
int i = random.Next(10);
Console.WriteLine(i); a++;
}
while (a < 14);
return;
以上是我写的代码,为什么每次生成的数字都是一样的..??

随机数的基本原理是系统取当前时间刻度作为随机数种子。这个随机数是毫秒级的。而你在一个循环中没有任何迟缓地取值,时间间隔过段,毫秒刻度没有变化,随机数种子一样,所以结果也一样。你试试看下面

do
{
Random random = new Random();
int i = random.Next(10);
System.Threading.Thread.Sleep(100);
Console.WriteLine(i); a++;
}
while (a < 14);

就是每次都线程迟缓100毫秒,你就可以看到变化了。

要证明上述问题很容易,你再试试下面的代码输出每次循环的时间刻度

do
{
Random random = new Random();
int i = random.Next(10);
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(i); a++;
}
输出结果类似:
633803324917500000
0
633803324917500000
0
633803324917500000
0
633803324917500000
0
633803324917500000
0
633803324917500000
0
633803324917500000
0
633803