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个不同的随机值(现在。一旦这个工作,我将需要更多)。问题是,上面的代码top
和left
总是等于相同的随机数。
答案 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