0

こんにちは私は文字列に2つの異なるランダムな文字を取得したいと思います。1つの配列を取得できますが、最初のランダム文字から2番目のランダム文字のみが取得されているようです。

私は何が間違っているのですか?コードは次のとおりです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    For i = 1 To 10

    Dim chars = "abcdefghijklmnopqrstuvwxyzZ0123456789"
    Dim random = New Random()
    Dim result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

    firstpart = TextBox2.Text
    rm = firstpart & result



    Dim chars = "0123456789"
    Dim random = New Random()
    Dim result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

    nextpart = TextBox3.Text
    rn = nextpart & result

今、私は2番目のランダムな文字を呼び出したいのですが、数字だけです。誰かがこれを助けたり説明したりできます。

4

2 に答える 2

2

Randomループを繰り返すたびに、新しいオブジェクトを作成します。ループに入る前に、一度作成する必要があります。コンピューターで生成された乱数は真にランダムではなく、ランダムに見えるだけであることに注意してください。乱数を生成するたびに、元の時間ベースのシード値に基づく「乱数」シーケンスの次の数値が返されます。新しいRandomオブジェクトを作成すると、ランダム化アルゴリズムに現在の時刻がシードされます。したがって、2つのRandomオブジェクトを同時に作成すると、両方とも同じ数列を生成します。ループは非常に高速であるため、Randomインスタンス化するすべてのオブジェクトがたまたま同時にシードされます。

于 2013-01-02T16:26:51.600 に答える
1

スティーブンが彼の答えで述べたようにコーディングを変更する必要がありますが、実際にはそれが欲しいと言っているように機能しているようです-私はそれをテストし、最初の文字列を文字と数字の混合物にし、2番目の文字列を数字だけにしました。これがあなたのコードに基づいて私が書いたものです:

    Dim rm As String = ""
    Dim rn As String = ""
    Dim chars As String = "abcdefghijklmnopqrstuvwxyzZ0123456789"
    Dim nums As String = "0123456789"
    Dim random = New Random()
    Dim result as string = ""

    For i = 1 To 10

        result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

        rm = rm & result


        result = New String(Enumerable.Repeat(nums, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

        rn = rn & result

    Next
于 2013-01-02T17:17:17.033 に答える