0
Dim top = RandomPosition()
Dim left = RandomPosition()    
End Sub

Function RandomPosition()
    Dim rand As New Random()
    Dim number = rand.Next(1, 100)
    Return number
End Function

こんにちは、私は 2 つの異なるランダム値を取得しようとしています (今のところ。これが機能したら、さらにいくつか必要になります)。問題は、上記のコードtopleft常に同じ乱数に等しいことです。

4

3 に答える 3

3

呼び出すたびに新しいランダム シーケンスを作成しRandomPositionますが、すばやく連続して呼び出すため、(時間に基づいて) 同じシードを持つことになります。同じシードは同じシーケンスを意味します。

変数を一度作成してrandから、次のように使用し続ける必要があります。

Dim rand as New Random()
Dim top = rand.Next (1, 100)
Dim left = rand.Next (1, 100)

または、本当に独自の関数でそれが必要な場合は、ランダム ジェネレーターを静的にして、呼び出し間で状態を維持できるようにします。

Function RandomPosition()
    Static rand = New Random()
    Return rand.Next(1, 100)
End Function

次の完全な VB2010 プログラムは、これを実際に示しています。

Module Module1
    Function RandomPosition()
        Static rand As Random = New Random()
        Return rand.Next(1, 100)
    End Function

    Sub Main()
        Dim top = RandomPosition()
        Dim left = RandomPosition()
        MsgBox("top = " & CStr(top) & ", left = " & CStr(left))
    End Sub
End Module

さまざまな実行で次のように出力されます。

top = 7, left = 93
top = 45, left = 90
top = 44, left = 62
于 2012-08-03T08:12:11.253 に答える
0

Random オブジェクトを初期化する前に 1 ミリ秒待つことができます。

System.Threading.Thread.Sleep(1)
Dim rand As New System.Random
于 2015-07-10T14:34:16.880 に答える
0

static同じインスタンスを保持するためにインスタンスを作成するのはどうですか?

Public Function RandomPosition(r) As Integer
    Static rand As System.Random = New System.Random()
    Return rand.Next(1, 100)
End Function
于 2012-08-03T08:22:42.450 に答える