「誕生日のパラドックス」を証明するプログラムを書いています。
For i = 0 To (pnum - 1)
days(i) = rnd(h:=365)
Next
i
(days(i))
1 から 365までの乱数を生成します。関数は次のとおりです。
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
それがコード全体です。それが行うことは、セットから 2 つの一致する乱数を検索することです。全体が 100 回繰り返され、結果をカウントする必要がありますが、代わりに 0 または 100 しか出力しません。