8 つの異なる文字を含む配列の作成に問題があり、それぞれが 3 つの異なる char 配列の 1 つから取得されます (1 つは厳密に小文字を含み、2 つ目は大文字のみを含み、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
これは機能しますが、何らかの理由で(何らかの理由で)特定の値をnullのままにする傾向があり、最終的には次のような出力が得られます。
QHK M D
LCR86
私が必要とするのは、コードが配列を適切に埋めることです。そのため、それぞれが 3 つの char 配列から取得された適切な値が含まれます。
注: myは、生成された後にそれに含まれる文字を交換して、それらの文字から完全にランダムな文字列を作成するため、chars(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
ループは配列に既に追加されているものを上書きし続けるため、最後のいくつかのスポットが開いたままになります。今必要なのは、最初の空のスロットにそれらを適切に追加する方法だけです.