我在Visual Basic中做Hangman游戏。我正在寻找在TextBox中键入一个字母并单击按钮来结帐。如果那个字母在String中,它将返回位置,但是当这个单词有两个匹配时......我怎么能这样做?
下一个代码只返回第一个匹配,我的意思是,只返回第一个" A"的位置。
Dim palabra As String = "PALABRA"
Private Sub BtnComprobar_Click(sender As Object, e As EventArgs) Handles BtnComprobar.Click
If txtComprobar IsNot "" Then
Dim letra As String = UCase(txtComprobar.Text)
If palabra.IndexOf(letra) > -1 Then
Select Case palabra.IndexOf(letra)
Case 0
Lbl1.Text = letra
LblP.ForeColor = Color.Red
Case 1
Lbl2.Text = letra
LblA.ForeColor = Color.Red
Case 2
Lbl3.Text = letra
LblL.ForeColor = Color.Red
Case 4
Lbl4.Text = letra
Case 5
Lbl5.Text = letra
LblB.ForeColor = Color.Red
End Select
Else
errores += 1
txtErrores.Text = CStr(errores)
End If
txtComprobar.Text = ""
End If
End Sub
感谢您的帮助
编辑:对不起,我没有说出来,我不能使用数组。答案 0 :(得分:0)
因为你看起来不太了解这种语言。我会给你一个可以帮助你的样本。
你可以反过来看问题,而不是查看单词中是否有选择的字母,看看单词的每个字符是否是选择的字母。
If palabra.IndexOf(letra) > -1 Then
If palabra(0) = letra Then
Lbl1.Text = letra
End If
If palabra(1) = letra Then
Lbl2.Text = letra
End If
If palabra(2) = letra Then
Lbl3.Text = letra
End If
If palabra(3) = letra Then
Lbl4.Text = letra
End If
If palabra(4) = letra Then
Lbl5.Text = letra
End If
If palabra(5) = letra Then
Lbl6.Text = letra
End If
Else
errores += 1
txtErrores.Text = CStr(errores)
End If
使用标签和循环数组会更容易。
答案 1 :(得分:0)
将此功能添加到您的代码中:
Public Function GetIndexes(ByVal SearchWithinThis As String, ByVal SearchForThis As String) As List(Of Integer)
Dim Result As New List(Of Integer)
Dim i As Integer = SearchWithinThis.IndexOf(SearchForThis)
While (i <> -1)
Result.Add(i)
i = SearchWithinThis.IndexOf(SearchForThis, i + 1)
End While
Return Result
End Function
并在您的代码中调用该函数:
Dim Indexes as list(of Integer) = GetIndexes(palabra, letra)
现在,GetIndexes将找到您要查找的字母的所有索引,并将它们放入索引列表中。
答案 2 :(得分:-1)
将您的字符串放入数组并循环遍历每个字母。当匹配时返回位置但继续循环直到你完成整个阵列。