visual basic array case语句

时间:2012-10-12 23:44:43

标签: arrays vb.net vba case

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

我的选择尝试:

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"

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

2 个答案:

答案 0 :(得分: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

字典的查找时间最快。

答案 1 :(得分:4)

您不必为此目的使用Select Case。一个简单的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