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;来解决它。但它没有帮助。有什么想法吗?
答案 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,超出范围。