2

我是 Visual Basic 的新手,一直在使用 vb.net 创建基于控制台/文本的游戏。我想让我的游戏更“聪明”一点。我必须这样做的想法是创建一个yes 的同义词数组和no 的同义词数组,以及over words 的类似数组。我打算使用带有数组的 case 语句来确定用户输入的天气是是或否的同义词。到目前为止我没有运气,我想知道这里是否有人知道如何做到这一点,或者我是否在找错树。也许我有不同的方法来解决这个问题?

我的选择尝试:

Select Case userInput
    Case yes(0) To yes(34)
        Console.WriteLine("you said something like yes, you said {0}", userInput)

End Select

我的数组的开头:(到目前为止有 34 个同义词)

Dim yes(0 To 34) As String

yes(0) = "yes"
yes(1) = "ok"
yes(2) = "yep"
yes(3) = "yeah"

如果有人可以帮助我,将不胜感激:) 非常感谢!

4

2 回答 2

4

我会创建一个翻译词典

Dim translations As New Dictionary(Of String, String)

translations.Add("yes", "yes")
translations.Add("ok", "yes")
translations.Add("yep", "yes")
translations.Add("yeah", "yes")

translations.Add("no", "no")
translations.Add("nope", "no")

使用这些定义,您可以非常轻松地获得答案的标准版本

Dim userInput = "yeah"
Dim response As String = Nothing

translations.TryGetValue(userInput, response)
Select Case response
    Case "yes"
        Console.WriteLine("ok")
    Case "no"
        Console.WriteLine("cancel")
    Case Else
        Console.WriteLine("rubbish!")
End Select

字典具有最快的查找时间。

于 2012-10-13T00:27:13.970 回答
4

您不必Select Case为此目的使用 a。一个简单List(Of T).Contains的就可以了。然后你可以继续把它放在一个函数中,这样你就可以在你的应用程序中多次调用它。

示例代码:

Public Enum Answer
    Yes
    No
    Other
End Enum

Public Function GetAnswer(answer As String) As Answer
    Static yesAnswers = New List(Of String)({"yes", "yeah", "yep", "aye"})
    Static noAnswers = New List(Of String)({"no", "nope", "nay"})

    If yesAnswers.Contains(answer.ToLower()) Then
        Return Answer.Yes
    ElseIf noAnswers.Contains(answer.ToLower()) Then
        Return Answer.No
    Else
        Return Answer.Cancel
    End If
End Function
于 2012-10-13T00:28:04.637 回答