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

字母和输入已作为字符串变暗,输入等于 console.readline() 每次运行程序时,我都会在第一个 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 运算符

如果编译的代码可以根据另一个表达式的结果绕过一个表达式的求值,则称逻辑操作为短路。如果第一个表达式求值的结果决定了运算的最终结果,则不需要对第二个表达式求值,因为它不能改变最终结果。如果绕过的表达式很复杂,或者涉及过程调用,短路可以提高性能。

于 2015-10-01T17:44:36.840 回答
0

当 k=0 时, input(k - 1) 导致数组索引为 -1,超出范围。

于 2015-10-01T17:37:54.200 回答