为什么这个随机数生成代码不起作用?

问题描述 投票:3回答:3

我正在编写一个证明“生日悖论”的程序。

    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。

vb.net random birthday-paradox
3个回答
4
投票

这里是重写的函数。


3
投票

即使给出了可行的解决方案,我也想解释“为什么”您的代码没有按照您期望的方式运行。


0
投票

以下代码将帮助您生成最多365个随机数。使用for循环,我在消息框中仅显示了五个,您可以通过增加for循环的限制来扩展它们。

© www.soinside.com 2019 - 2024. All rights reserved.