随机数发生器不起作用

时间:2014-11-07 10:45:14

标签: 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.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。抱歉英语不好。

2 个答案:

答案 0 :(得分:1)

这是你的骰子课,有一些变化。试试看。问题是你正在紧密连续地创建一个新的随机数,这导致返回的数字都是相同的。

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

请参阅RandomWrapper

答案 1 :(得分:0)

我认为您的问题是随机生成器是基于时间的,因此它会根据当前时间创建“随机”值。而且由于不同的骰子几乎同时运行,你将获得相同的随机数。请参阅:Why isn't Random() random?