1
           For k As Integer = 0 To (input.Length - 1)
                If input(input.Length - 1) <> " " Then
                    letter &= input(k)
                ElseIf input(k) = " " And ((k = 0) Or (input(k - 1) <> " ")) Then
                    For a As Integer = lastspace To k
                        letter &= input(a)
                    Next
           Next

プログラムを実行するたびに、最初の ElseIf で "IndexOutOfRangeException" エラーが発生します。私はVBを始めたばかりなので、ここで何がうまくいかなかったのか、またはそれを修正する方法がよくわかりません。「k = 0 or」で修正しようとしましたが、役に立ちませんでした。何か案は?

4

2 に答える 2

2

VB.NET の Or 演算子は、式の評価を短絡しません。したがって、 k が 0 の場合、 Or は k-1 の評価をブロックしません

使用する必要があります

ElseIf input(k) = " " And ((k = 0) OrElse (input(k - 1) <> " ")) Then

MSDNまたはオペレーターから

ブール比較では、Or 演算子は常に両方の式を評価します。これには、プロシージャ コールの作成が含まれる場合があります。OrElse 演算子 (Visual Basic) はショートサーキットを実行します。つまり、expression1 が True の場合、expression2 は評価されません。

MSDN OrElse オペレーターから

コンパイルされたコードが別の式の結果に応じて 1 つの式の評価をバイパスできる場合、論理演算はショートサーキットと呼ばれます。評価された最初の式の結果が操作の最終結果を決定する場合、最終結果を変更できないため、2 番目の式を評価する必要はありません。バイパスされた式が複雑な場合、またはプロシージャ コールが含まれる場合は、短絡によりパフォーマンスが向上する可能性があります。

于 2015-10-01T17:44:36.840 に答える
0

k=0 の場合、input(k - 1) の結果、配列インデックスは -1 になり、範囲外になります。

于 2015-10-01T17:37:54.200 に答える