0

私はVBが初めてで、次のコードに問題がありました。

    Dim random As String = "asfdgasfdgasfdgasfd11"
    Dim length As Integer = Nothing

    length = random.Length
    Console.WriteLine(random.Length)
    Console.WriteLine(length)
    Console.WriteLine()
    Console.WriteLine()
    Console.ReadLine()

    If length <= 20 Then
        Console.WriteLine(random.Substring(0, length))
    ElseIf length <= 40 Then
        Console.WriteLine(random.Substring(0, 20))
        Console.WriteLine(random.Substring(20, length))
    End If

    Console.ReadLine()

エラー:

「mscorlib.dll で 'System.ArgumentOutOfRangeException' 型の未処理の例外が発生しました

追加情報: インデックスと長さは、文字列内の場所を参照する必要があります"

20( 、length))によりエラーが発生していると思います。特定の文字数でない限り、プログラムがクラッシュしないように、変数に長さを割り当てようとしました。

任意の長さの変数を作成しようとしていますが、変数が 20 文字を超える場合は、1 行に 20 文字しか出力されません。

4

1 に答える 1

1

追加情報: インデックスと長さは、文字列内の場所を参照する必要があります

それがポイントです。2 番目の WriteLine ではrandom、20 番目の文字から始まる文字列を出力するように要求しますが (開始インデックスは 21 文字あります)、21 文字 (長さ = 21) の出力を要求します。
はい、startindex + length = 41 で、文字列の制限を超えています

あなたはその行を修正しようとすることができます

Console.WriteLine(random.Substring(20, length - 20))

または、一度に 20 文字を出力する while ループを導入する

length = random.Length
Console.WriteLine(random.Length)
Console.WriteLine(length)
Console.WriteLine()
Console.WriteLine()
Console.ReadLine()

Dim curStart = 0 
Dim loopCounter = 0
while(curStart < random.Length)
    Console.WriteLine(random.Substring(curStart, System.Math.Min(20, length - 20 * loopCounter)))
    curStart = curStart + 20
    loopCounter = loopCounter + 1
End While
于 2013-01-13T23:59:52.970 に答える