VB随机函数返回两次相同的值

时间:2012-08-03 08:09:28

标签: vb.net visual-studio-2008

Dim top = RandomPosition()
Dim left = RandomPosition()    
End Sub

Function RandomPosition()
    Dim rand As New Random()
    Dim number = rand.Next(1, 100)
    Return number
End Function

大家好我想要获得2个不同的随机值(现在。一旦这个工作,我将需要更多)。问题是,上面的代码topleft总是等于相同的随机数。

3 个答案:

答案 0 :(得分:3)

每次调用RandomPosition时都会创建一个新的随机序列,但由于您是在快速连续调用它,因此它们将具有相同的种子(基于时间)。相同的种子意味着相同的序列。

您应该创建一次rand变量,然后继续使用它,例如:

Dim rand as New Random()
Dim top = rand.Next (1, 100)
Dim left = rand.Next (1, 100)

或者,如果确实希望它在自己的函数中,请将随机生成器设置为静态,以便在调用时保持其状态:

Function RandomPosition()
    Static rand = New Random()
    Return rand.Next(1, 100)
End Function

以下完整的VB2010程序显示了这一点:

Module Module1
    Function RandomPosition()
        Static rand As Random = New Random()
        Return rand.Next(1, 100)
    End Function

    Sub Main()
        Dim top = RandomPosition()
        Dim left = RandomPosition()
        MsgBox("top = " & CStr(top) & ", left = " & CStr(left))
    End Sub
End Module

它在各种运行中输出:

top = 7, left = 93
top = 45, left = 90
top = 44, left = 62

答案 1 :(得分:0)

如何使实例static保留相同的实例?

Public Function RandomPosition(r) As Integer
    Static rand As System.Random = New System.Random()
    Return rand.Next(1, 100)
End Function

答案 2 :(得分:0)

在初始化Random对象之前,您可以等待1毫秒。

System.Threading.Thread.Sleep(1)
Dim rand As New System.Random