0
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等于相同的随机数。

4

3 回答 3

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
于 2012-08-03T08:12:11.253 回答
0

如何创建一个实例static来保留相同的实例?

Public Function RandomPosition(r) As Integer
    Static rand As System.Random = New System.Random()
    Return rand.Next(1, 100)
End Function
于 2012-08-03T08:22:42.450 回答
0

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

System.Threading.Thread.Sleep(1)
Dim rand As New System.Random
于 2015-07-10T14:34:16.880 回答