当前位置 : 主页 > 编程语言 > c语言 >

vb.net – 随机数生成不起作用?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在编写一个程序来证明’生日悖论’. 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 rn
我正在编写一个程序来证明’生日悖论’.

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.

这是重写的功能.

Public Shared rnum As New Random 'only one needed per application

Private Function myRand(h As Integer) As Integer
    Dim num As Integer
    num = rnum.Next(1, h) 'note maxValue is exclusive
    Return num
End Function

从Random的文档中,“默认种子值是从系统时钟派生出来的,并且具有有限的分辨率.因此,通过调用默认构造函数紧密连续创建的不同Random对象将具有相同的默认种子值,并且因此,将生成相同的随机数集……“

这就是你遇到问题的原因.我还更改了函数的名称,因为它匹配旧的Rnd方法.

网友评论