0

您好,我想获得 2 个不同的随机字符作为字符串。我只能得到 1 个数组,第二个随机字符似乎是从第一个随机字符中得到的。

我究竟做错了什么?这是代码:

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

现在我想调用第二个随机字符,但只有数字,任何人都可以帮助或向我解释一下。

4

2 回答 2

2

Random每次迭代循环时,您都在创建一个新对象。在进入循环之前,您需要创建一次。请记住,计算机生成的随机数并不是真正随机的,它们只是看起来是随机的。每次生成随机数时,它只是返回基于原始基于时间的种子值的“随机”数序列中的下一个数字。当您创建一个新Random对象时,它会使用当前时间为随机算法播种。因此,如果Random同时创建两个对象,它们都将生成相同的数字序列。由于您的循环非常快,Random因此您正在实例化的所有对象都恰好在同一时间播种。

于 2013-01-02T16:26:51.600 回答
1

尽管您的编码需要按照史蒂文在他的回答中提到的那样进行更改,但它实际上似乎可以像您提到的那样工作 - 我对其进行了测试,并得到第一个字符串是字符和数字的混合,而第二个字符串只是数字。这是我根据你的代码写的:

    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 回答