似乎VB.NET评估布尔条件While j >= 1 And Card(j - 1) > NextCard
的两侧,这当然会导致出界错误。
我编程的其他语言会首先评估左边的条件,然后在第二个条件导致程序崩溃之前退出循环。
任何人都可以看到一个明显的解决方案,或者我只是需要将算法变成一个令人费解的混乱?
Sub Main()
Dim card() As Integer = {7, 4, 6, 8, 1, 5}
Insertion_Sort(card)
For Each item In card
Console.WriteLine(item)
Next
End Sub
Sub Insertion_Sort(ByRef Card() As Integer)
Dim NextCard
Dim j As Integer
For i = 1 To Card.Length - 1
NextCard = Card(i)
j = i
While j >= 1 And Card(j - 1) > NextCard
Card(j) = Card(j - 1)
j -= 1
End While
Card(j) = NextCard
Next
End Sub
答案 0 :(得分:2)
正如Capellan建议的那样,可以使用AndAlso关键字代替And来进行短路评估:
While j >= 1 AndAlso Card(j - 1) > NextCard
Card(j) = Card(j - 1)
j -= 1
End While
这会导致VB.Net首先评估第一个表达式,然后,只有当第一个表达式为真时,它才会计算第二个表达式。
我建议您查看MSDN页面:https://msdn.microsoft.com/en-us/library/cb8x3kfz.aspx