我正在编写一个证明“生日悖论”的程序。
For i = 0 To (pnum - 1)
days(i) = rnd(h:=365)
Next
[它为1到365之间的每个i
(days(i))
生成一个随机数,该函数是:
Private Function rnd(h As Integer)
Dim num As Integer
Dim rnum As Random
rnum = New Random
num = rnum.Next(1, h)
Return num
End Function
当我在for循环中添加一个断点并手动进行处理时,它可以正常工作,但是如果我只需运行该程序,它就会在days(I)的每个时隙中放入相同的随机数。
任何想法为何?
数字生成现在正在工作,但是在使用断点进行调试时,程序仍在以不同的方式工作。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim prc As Integer
For r As Integer = 1 To 100
Dim pnum As Integer = Val(TextBox1.Text) ''Number of people
Dim days(pnum - 1) As Integer
Dim rnd As Random = New Random()
For i As Integer = 0 To (pnum - 1)
days(i) = rnd.Next(365)
Next
Dim count As Integer = 0
Dim inc As Integer = 0
Do
For inc = (count + 1) To (pnum - 1)
If count = (pnum - 1) Then
Exit For
End If
If days(count) = days(inc) Then
prc += 1 ''Match found
Exit Do
End If
Next
If count = (pnum - 1) Then
Exit Do
End If
count += 1
Loop
Next
MsgBox(prc)
End Sub
End Class
这就是整个代码。它要做的是从集合中搜索两个匹配的随机数。整个过程重复100次,应该对结果进行计数,但是只输出0或100。
这里是重写的函数。
即使给出了可行的解决方案,我也想解释“为什么”您的代码没有按照您期望的方式运行。
以下代码将帮助您生成最多365个随机数。使用for循环,我在消息框中仅显示了五个,您可以通过增加for循环的限制来扩展它们。