Vb.net 随机数发生器不工作

Vb.net 随机数发生器不工作,vb.net,random,Vb.net,Random,我对生成随机数的函数有问题 我有班级骰子: Public Class dice Private isHold As Boolean = False Private rnd As Random Private rolledDots As Integer Public Sub roll() If isHold = False Then rnd = New Random rolledDots = rnd

我对生成随机数的函数有问题

我有班级骰子:

Public Class dice
    Private isHold As Boolean = False
    Private rnd As Random
    Private rolledDots As Integer

    Public Sub roll()

        If isHold = False Then
            rnd = New Random
            rolledDots = rnd.Next(1, 7)
        End If
    End Sub

End Class
我在rollcup课程中掷骰子:

Public Class rollCup
    Public dices As New List(Of dice)
    Sub New()
        For i = 0 To 5
            dices.Add(New dice)
        Next
    End Sub
    Public Sub rollDices()
        For Each dice In dices
            dice.roll()
        Next
    End Sub
End Class
问题是骰子不会产生随机数。每个骰子都产生了相同的数字。 我只能通过循环中的睡眠线程实现随机数:

Public Sub roll()
    If isHold = False Then
        rnd = New Random
        System.Threading.Thread.Sleep(50)
        rolledDots = rnd.Next(1, 7)
    End If
End Sub
或者在消息框中显示每个数字:

Public Sub roll()
    If isHold = False Then
        rnd = New Random
        rolledDots = rnd.Next(1, 7)
        MessageBox.Show(rolledDots)
    End If
End Sub
我的问题还有别的答案吗?
ps.抱歉英语不好。

我想你的问题是randomgenerator是基于时间的,所以它会根据当前时间创建一个“随机”值。因为不同的骰子在几乎相同的时间运行,你会得到相同的随机数。请参阅:

这是您的骰子课程,有一些改动。试试看。问题是,您正在创建一个新的随机数,这导致返回的数字都是相同的

Public Class dice
    Private isHold As Boolean = False
    Private Shared rnd As New Random '<<<< note Shared
    Private rolledDots As Integer

    Public Sub roll()
        If Not Me.isHold Then
            Me.rolledDots = dice.rnd.Next(1, 7)
        End If
    End Sub

End Class
公共类骰子
Private isHold为布尔值=False

私有共享rnd作为新的随机“
MessageBox
是调试此类问题的一种糟糕方法