2014-03-24 29 views
2

我在for-next-statement中创建3个随机字节。For-Next-Statement中的新随机数重复相同的值

但是,它们对于每个for-next都是相同的,例如“333”或“777”。

我想知道为什么这样,我做错了什么。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    Dim s As String = String.Empty 

    For i As Integer = 0 To 2 
     s += GetRandomByte().ToString 
    Next 

    Me.TextBox1.Text = s 

End Sub 

Public Function GetRandomByte(Optional ByVal uLow As Byte = 1, Optional ByVal uHigh As Byte = 9) As Byte 

    Dim r As New Random 
    Dim b As Integer = r.Next(CInt(uLow), CInt(uHigh + 1)) 

    Return b 

End Function 

回答

3

在你的构造新的随机,给它一个新的种子每一次。我喜欢使用当前时间戳的哈希码值

New Random(Now.GetHashCode) 
+2

更好的办法是在方法外部声明Random实例。 –

0

保持相同的情况下对所有呼叫:

Dim r As New Random() 

Public Function GetRandomByte(Optional ByVal uLow As Byte = 1, Optional ByVal uHigh As Byte = 9) As Byte 
    Return r.Next(CInt(uLow), CInt(uHigh + 1)) 
End Function 

,或者传递给随机构造种子:

Dim r As New Random(CInt(Date.Now.Ticks And &h0000FFFF))