Random的奇怪问题,谁能解释

ffjing 2005-04-29 04:34:39
代码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为什么输出不同的结果?
...全文
166 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolksj 2005-04-30
  • 打赏
  • 举报
回复
是的,随机算法也是算法,跟时间有关,也跟其它的东西有关,并不只与时间有关

我记得有个函数可以强制更换种子,使取到的值不一样
wjcking 2005-04-29
  • 打赏
  • 举报
回复
恩,楼上的
v192 2005-04-29
  • 打赏
  • 举报
回复
最简单的验证办法: 你把代码1在第二个GetRandom();设定断点,让他停一次,保证数字就不一样了
v192 2005-04-29
  • 打赏
  • 举报
回复
kill我干吗?

你怎么就没明白呢?你如果以前很仔细的玩过电子计算器,你就会发现它的那个Random方法也有类似的情况。
把电子计算器Resert之后,你做固定的操作再去Random,第一次出现的数字绝对是不变的。你重复多次都是一样的。

所以,如果你若全世界的都在时间A点生成的一个Random对象,那么他们执行第N次(N必须为同一个数字)Next方法得到的数字必然是相同的。
ffjing 2005-04-29
  • 打赏
  • 举报
回复
代码5:
kill v192;

"Random的原理是基于时间的"
那么世界上所有机器同时获取一个Random,会取到相同的值了?
我去试验一下
baiguli 2005-04-29
  • 打赏
  • 举报
回复
代码2 是正确的使用方法
v192 2005-04-29
  • 打赏
  • 举报
回复
不用代码5了,50分交来就是了,哈哈
v192 2005-04-29
  • 打赏
  • 举报
回复
Random的原理是基于时间的
代码1,两个Random对象几乎同时生成,可以说两个对象一摸一样,所以生成的数字一样的

代码2,只有一个Random对象,调用Next方法获取新的数字,所以肯定不会相同。

代码3,因为间隔了1000,所以Random对象不同了。
ffjing 2005-04-29
  • 打赏
  • 举报
回复
代码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());
}
结果输出两个不一样的数字

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧