代码1:
private void button1_Click(object sender, System.EventArgs e)
{
GetRandom();
GetRandom();
}
private void GetRandom()
{
Random R=new Random();
Console.WriteLine(R.Next(100).ToString());
}
结果输出两个一样的数字代码2:
private void button1_Click(object sender, System.EventArgs e)
{
GetRandom();
GetRandom();
}
private Random R=new Random();
private void GetRandom()
{
Console.WriteLine(R.Next(100).ToString());
}
结果输出两个不一样的数字代码3:
private void button1_Click(object sender, System.EventArgs e)
{
GetRandom();
System.Threading.Thread.Sleep(1000);
GetRandom();
}
private void GetRandom()
{
Random R=new Random();
Console.WriteLine(R.Next(100).ToString());
}
结果输出两个不一样的数字有谁能解释这个现象!特别是代码1和代码2为什么输出不同的结果?

解决方案 »

  1.   

    代码4:
    private void button1_Click(object sender, System.EventArgs e)
    {
    GetRandom();
    }
    private void GetRandom()
    {
    Random R=new Random();
    Console.WriteLine(R.Next(100).ToString());
    Console.WriteLine(R.Next(100).ToString());
    }
    结果输出两个不一样的数字
      

  2.   

    Random的原理是基于时间的
    代码1,两个Random对象几乎同时生成,可以说两个对象一摸一样,所以生成的数字一样的代码2,只有一个Random对象,调用Next方法获取新的数字,所以肯定不会相同。代码3,因为间隔了1000,所以Random对象不同了。
      

  3.   

    代码5:
    kill v192;"Random的原理是基于时间的"
    那么世界上所有机器同时获取一个Random,会取到相同的值了?
    我去试验一下
      

  4.   

    kill我干吗?你怎么就没明白呢?你如果以前很仔细的玩过电子计算器,你就会发现它的那个Random方法也有类似的情况。
    把电子计算器Resert之后,你做固定的操作再去Random,第一次出现的数字绝对是不变的。你重复多次都是一样的。所以,如果你若全世界的都在时间A点生成的一个Random对象,那么他们执行第N次(N必须为同一个数字)Next方法得到的数字必然是相同的。
      

  5.   

    最简单的验证办法: 你把代码1在第二个GetRandom();设定断点,让他停一次,保证数字就不一样了