0

我正在用 Visual Basic 做刽子手游戏。我正在寻找在 TextBox 中输入一个字母并单击一个按钮来签出。如果该字母在字符串中,它将返回位置,但是当单词有两个匹配项时……我该怎么做?

下一个代码只返回第一个匹配项,我的意思是,只返回第一个“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

感谢您的帮助

编辑:对不起,我没有说,我不能使用数组。

4

3 回答 3

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 将找到您要查找的字母的所有索引,并将它们放在索引列表中。

于 2016-09-29T11:16:06.553 回答
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

使用标签和循环数组会容易得多。

于 2016-09-29T11:08:46.757 回答
-1

将您的字符串放入一个数组并循环遍历每个字母。匹配时返回位置,但继续循环,直到遍历整个数组。

于 2016-09-28T15:49:49.840 回答