您好我想获得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
现在我想拨打第二个随机字符,但只有号码,任何人都可以帮助或向我解释。
答案 0 :(得分:2)
每次迭代循环时,您都在创建一个新的Random
对象。在进入循环之前,您需要创建一次。请记住,计算机生成的随机数并非真正随机,它们只是出现是随机的。每次生成一个随机数时,它只是返回基于原始基于时间的种子值的“随机”数字序列中的下一个数字。当您创建新的Random
对象时,它会使用当前时间对随机化算法进行播种。因此,如果同时创建两个Random
个对象,它们将生成相同的数字序列。由于你的循环非常快,所以你实例化的所有Random
对象恰好都会在同一时间播种。
答案 1 :(得分: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