我正在编写一个程序来证明“生日悖论”。
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 循环中添加断点并手动通过它时,它工作正常,但如果我只是运行程序,它会在天数(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。