2016-01-21 81 views
3

我在下面写了这段代码,期待它每次运行它都会返回相同的结果,但事实并非如此。有人可能会向我解释为什么每次运行它时,具体种子的随机数生成器会生成一个不同的数字,因为我编写了与命令行应用程序相同的程序,它工作得很好。为什么不是随机数字序列相同?

这里是我的VB.NET代码(断码):

'Bunch of WinForms Code 
Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles PictureBox1.Click 
    Randomize(3) 
    MsgBox(Rnd.ToString) 
End Sub 

这是我的工作VB.NET命令行应用程序:

Imports System.Console 
Public Module rnum 
    Sub Main() 
     Randomize(3) 
     WriteLine(Rnd.ToString) 'Returns 0.1387751 
    End Sub 
End Module 
+1

从[MSDN](https://msdn.microsoft.com/en-us/library/8zedbtdt(v = vs.90).aspx):'要重复随机数序列,在使用Randomize和数字参数之前立即调用带有负面参数的Rnd。使用随机数与数值相同的值不会重复上一个序列。' – Plutonix

+1

那么为什么它在命令行应用程序中工作? –

+0

@Plutonix仍然不能回答我为什么在命令行应用程序中工作的问题 –

回答

4

如果你把控制台代码到会发生什么一个循环?我打赌你会收到相同的数字序列。控制台运行1次并产生第一个结果,而如果多次单击该按钮,则本质上是循环遍历随机结果。

当我这样做,4次我收到相同的4个数字,当我点击按钮4次。

Sub Main() 
    For x As Integer = 0 To 3 
     Randomize(3) 
     Console.WriteLine(Rnd.ToString) 'Returns 0.1387751 
    Next 
    Console.ReadLine() 
End Sub 

生产:
0.1387751
0.05591547
0.8356526
0.2308619

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Randomize(3) 
    MsgBox(Rnd.ToString) 
End Sub 

1日点击
0.05591547 2日点击
0.8356526 3日点击产生
0. 0.2308619第4次点击

+1

@NullSpark - 这是正确的答案。这是因为控制台应用程序退出。如果您单击一次图片框并关闭表格应用程序(从而模仿控制台应用程序实际执行的操作),则会一次又一次地看到相同的结果和相同的编号。我不敢相信我以前没有看到它! –

+0

@ roryap它虽然没有为我做。这就是我如此困惑的原因 –

+0

你的意思是如果你运行你的表单,点击你的图片框,关闭表格(即完全退出应用程序),再次运行表单,单击图片框等等,你不会一遍又一遍地获得相同的号码 - 您使用控制台应用程序获得的号码? –

相关问题