private void RandomNumber_Click(object sender, EventArgs e)
{
Random randnumber = new Random();
MessageBox.Show(randnumber.Next(1, 150).ToString());
}
在vb 6.0中生成了随机数,但如果我们退出应用程序并重新启动它,那么随机数生成的顺序与在dotnet中的顺序相同,它不像随机数生成是完美的!这怎么可能 ?它背后的逻辑是什么?
答案 0 :(得分:11)
随机生成器基本上是一个确定性函数,从另一个生成一个数字。如果从给定值开始,您将始终以相同的结果结束。通常(随机化)从当前时间生成对随机生成器的第一输入(这称为种子)。 .NET只是默认使用,vb 6.0可能不是。
引自J. von Neumann
任何考虑产生随机数字的算术方法的人当然都处于罪恶状态。
答案 1 :(得分:2)
提供真正随机的数字一直是计算机科学中最难的挑战之一。问题没有解决。我可以向你保证,在.NET中,随机数生成绝不是“完美的”。它比VB6好一点。
Redgate Reflector认为在.NET中,Class Random()的默认构造函数提供了Environment.TickCount作为默认种子(自上次启动以来的毫秒数)。 VB6可能有一个常量作为默认值。
答案 2 :(得分:2)
在VB6中,通常会调用
Randomize Timer
每次都要获得不同的数字序列。
答案 3 :(得分:0)
在dotNet中Random
类使用当前系统时间作为种子。似乎vb 6.0总是使用相同的种子。
答案 4 :(得分:0)
几天前我被告知,在实例化一个新的Random类时,它与
相同Random r = new Random(Environment.TickCount);
这就是数字不同的原因