1

ランダムな文字を生成するコードがあります。問題は、 「startIndex は文字列の長さより大きくすることはできません。パラメータ名: startIndex」というエラーが時々返されることです。

この種のエラーが発生しないようにするにはどうすればよいですか?

これが私のコードです:

Friend Function gentCtrlChar()
    Dim ran As New Random
    Dim alpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Dim alpha2 As String = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
    Dim rdm As New Random
    Dim genChar As String = ""
    For i As Integer = 1 To 52
        Dim selChar As Integer = rdm.Next(1, 28)
        Dim selChar2 As Integer = rdm.Next(1, 28)
        genChar = genChar + "" + alpha.Substring(selChar, 1) + "" + alpha2.Substring(selChar2, 1)
        On Error Resume Next
        Exit For
    Next
    Return genChar
End Function

ご覧のとおり、「On Error Resume Next」を入れてみましたが、これでエラーが解決されることを期待しています。しかし悲しいことに、それはその仕事をしません。または、間違った方法または間違った状況で使用していますか?

何か助けはありますか?

ありがとう!

4

2 に答える 2

3

このコード:

Dim selChar As Integer = rdm.Next(1, 28)

この文字列の長さよりも長い (27 または 28) 数値を返すことがあります。

Dim alpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"  (only 26 characters long)

そのため、selChar が 26 以上の場合は無効です。

alpha.Substring(selChar, 1)

最も簡単な修正は次のとおりです。

Dim selChar As Integer = rdm.Next(0, alpha.Length) 
Dim selChar2 As Integer = rdm.Next(0, alpha2.Length) 
于 2013-09-17T20:29:22.507 に答える
1

この方法を試してください。すっきりしていてわかりやすいと思います。A - Z は ASCII マップの 65 - 90 と同じなので、整数を Char 値に変換するのは非常に簡単です。次に、文字列ビルダーを使用して、これを読みやすくします。

Dim rdm As New Random
Dim genChar As New StringBuilder()
For i As Integer = 1 To 52
    Dim selChar As Char = Chr(rdm.Next(65, 90))
    Dim selChar2 As Char = Chr(rdm.Next(65, 90))
    genChar.Append(selChar)
    genChar.Append(selChar2)
Next
Return genChar.ToString
于 2013-09-17T21:39:55.907 に答える