随机数发生器相同数字的问题

时间:2019-04-04 15:18:15

标签: vb.net

我对两个变量之间的随机数有疑问。它总是给我两个数字之间相同的数字。不是两个数字之间的随机数。


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Randomize()
        Dim rnd As New Random
        Dim minval As Integer
        Dim maxval As Integer

        minval = 1000 / grempamin.Value
        maxval = 1000 / grempamax.Value

        Timer1.Interval = rnd.Next(maxval, minval)

        If MouseButtons = MouseButtons.Left Then
            apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
            apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        End If
    End Sub

2 个答案:

答案 0 :(得分:1)

一些更改

Private Shared rnd As New Random  '<<<<<<<<<<<<<
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'Randomize 'not needed  '<<<<<<<<<<<<<
    Dim minval As Integer
    Dim maxval As Integer

    minval = 1000 / grempamin.Value
    maxval = 1000 / grempamax.Value
    Timer1.Interval = rnd.Next(minval, maxval + 1) '<<<<<<<<<<<<<

    If MouseButtons = MouseButtons.Left Then
        apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    End If
End Sub

Random Doc

edit:每个标记注释。如果min和max分别不是min和max,请对rnd.next

进行更改。
    Timer1.Interval = rnd.Next(Math.Min(minval, maxval), Math.Max(minval, maxval) + 1) '<<<<<<<<<<<<<

答案 1 :(得分:1)

如果grempamingrempamax的值彼此接近,则将它们除以1000可以得到相同的整数值。这可能就是您的代码中发生的事情。

您没有很好地解释您的代码要求,但是我怀疑您在这里犯了一些基本的数学错误。

我认为grempamingrempamax具有最小和最大秒数,因此,由于计时器间隔为毫秒,因此您需要乘以1000。

如果是这样,那么您的代码示例可能会更好地工作(包括dbasnett的更改):

Private rnd As New Random
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim minval As Integer
    Dim maxval As Integer

    minval = 1000 * grempamin.Value
    maxval = 1000 * grempamax.Value

    Timer1.Interval = rnd.Next(minval, maxval)

    If MouseButtons = MouseButtons.Left Then
        apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    End If
End Sub