这是我教科书中的代码,用于找出哪个州以前两个字母开头。
Dim letters As String=mtbFirstTwoLetters.Text.ToUpper
Dim i As Integer=0
Do Until(CStr(lstStates.Items(i)).ToUpper>letters) Or(i=lstStates.Items.Count-1)
i +=1
Loop
If CStr(lstStatesItems(i)).ToUpper.StartsWith(letters) Then
txtOutput.Text=CStr(lstStates.Items(i))&" begins with " & mtbFirstTwoLetters.Text & ". "
Else
txtOutput.Text="No state begins with " & mtbFirstTwoLetters.Text & ". "
End If
我认为循环的位置是错误的,它会循环,直到找到一个名字超过所要求的字母的字母。
我认为应该是
Dim letters As String=mtbFirstTwoLetters.Text.ToUpper
Dim i As Integer=0
Do
i +=1
Loop Until(CStr(lstStates.Items(i)).ToUpper>letters) Or (i=lstStates.Items.Count-1) Or (CStr(lstStatesItems(i)).ToUpper=letters)
If CStr(lstStatesItems(i)).ToUpper.StartsWith(letters) Then
txtOutput.Text=CStr(lstStates.Items(i))&" begins with " & mtbFirstTwoLetters.Text & ". "
Else
txtOutput.Text="No state begins with " & mtbFirstTwoLetters.Text & ". "
End If
哪个是正确的,为什么?
===================== 修订版
我真的无法理解第一个背后的逻辑,它会按字母顺序找出其名称超过所追求的状态,但如果我想要的状态是 EFA 并且状态如下它是 FFA ,第一个代码找到 FFA ,对我来说没有意义。
UPDATE2
Do Until(CStr(lstStates.Items(i)).ToUpper>letters) Or (i=lstStates.Items.Count-1) Or (CStr(lstStatesItems(i)).ToUpper=letters)
i +=1
Loop
我现在还需要设置i = -1吗?