为什么这个指数超出范围? (Visual Basic)

时间:2015-10-01 17:33:53

标签: vb.net visual-studio visual-studio-2015 indexoutofrangeexception

           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() 每次我运行程序时,我都会得到一个&#34; IndexOutOfRangeException&#34;第一个ElseIf上的错误。我刚开始使用VB,所以我不确定这里出了什么问题,或者如何修复它。 我试着用&#34; k = 0或&#34;来解决它。但它没有帮助。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

VB.NET中的Or运算符不会使表达式的评估短路。因此,当k为0时,你的或不阻止对k-1的评估

你应该使用

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

来自MSDN Or Operator

  

在布尔比较中,Or运算符始终对两者进行求值   表达式,可能包括进行过程调用。 OrElse   运算符(Visual Basic)执行短路,这意味着如果   expression1为True,然后不计算expression2。

来自MSDN OrElse Operator

  

如果编译的话,逻辑操作被认为是短路的   代码可以绕过一个表达式的评估取决于   另一种表达的结果。如果是第一个表达式的结果   评估确定了操作的最终结果,没有   需要评估第二个表达式,因为它无法改变   最后结果。如果绕过,短路可以提高性能   表达式很复杂,或者它涉及过程调用。

答案 1 :(得分:0)

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