我在制作一个包含 8 个不同字符的数组时遇到问题,每个字符都取自 3 个不同的 char 数组之一(一个包含严格的小写字符,第二个只包含大写字符,第三个只包含数字)。
问题是,它应该一次从随机字符数组中获取 1 个字符。
我的包含每组字符的数组在这里声明:
Dim lcase() As Char = "abcdefghijklmnopqrstuvwxyz".ToCharArray()
Dim ucase() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
Dim num() As Char = "0123456789".ToCharArray()
Dim chars(7) As Char
至于填充最终数组的代码(在我的例子中是 chars(7)):
Dim lim As Short = rand.Next(1, 5)
For x = 0 To lim
Dim char_num As Integer = rand.Next(0, lcase.GetUpperBound(0))
chars(x) = lcase(char_num)
Next
Dim lim2 As Short = 6 - lim
For x = 0 To lim2
Dim char_num As Integer = rand.Next(0, num.GetUpperBound(0))
chars(x) = num(char_num)
Next
For x = 0 To 6 - lim2
Dim char_num As Integer = rand.Next(0, ucase.GetUpperBound(0))
chars(x) = ucase(char_num)
Next
这是可行的,尽管由于某种原因它倾向于(出于某种原因)将某些值保留为空,最终导致我得到如下输出:
QHK M D
LCR86
我需要的是让我的代码正确地填充数组,因此它包含正确的值,每个值都取自三个 char 数组。
注意: mychars(7)
被声明为Char
因为我在生成后交换了其中包含的字符,以从这些字符中创建一个完全随机的字符串。
我怀疑我在填充数组的代码中的某个地方犯了一个错误,但如果我的错误不在上面的代码中,这里是随机化chars()
数组中字符顺序的代码:
Dim j As Integer
Dim swap As Char
Dim r As Random = New Random()
For i As Integer = 0 To chars.GetUpperBound(0)
j = r.Next(0, i)
swap = chars(j)
chars(j) = chars(i)
chars(i) = swap
Next i
提前谢谢各位。
更新:我意识到我的错误,for
循环不断覆盖已经添加到数组中的内容,从而使最后几个位置保持打开状态。我现在需要的只是一种让它们正确添加到第一个空插槽的方法。