我在生成随机数的功能方面遇到了麻烦。
我有课堂骰子:
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。抱歉英语不好。
答案 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
答案 1 :(得分:0)
我认为您的问题是随机生成器是基于时间的,因此它会根据当前时间创建“随机”值。而且由于不同的骰子几乎同时运行,你将获得相同的随机数。请参阅:Why isn't Random() random?