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

问题描述 投票:1回答:2

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


    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
vb.net
2个回答
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

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

编辑:每个评论评论。如果min和max可能不是min和max,则对rnd.next进行此更改

    Timer1.Interval = rnd.Next(Math.Min(minval, maxval), Math.Max(minval, maxval) + 1) '<<<<<<<<<<<<<
© www.soinside.com 2019 - 2024. All rights reserved.