2015-05-16 3 views
0

Это то, что у меня есть до сих пор;Выберите случай для различных входных сумм

Function myChoice(ByVal opt1 As String, ByVal opt2 As String, ByVal opt3 As String, ByVal opt4 As String) 

    Dim choose As String 
    Dim mynum As Integer 

    Randomize() 
    mynum = Int(Rnd() * 4 + 1) 

    Select Case mynum 
     Case 1 
      choose = opt1 
     Case 2 
      choose = opt2 
     Case 3 
      choose = opt3 
     Case 4 
      choose = opt4 
    End Select 

    myChoice = choose 

End Function 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    MsgBox(myChoice("Red", "Orange", "Yellow", "Green")) 

End Sub 

То, что я пытаюсь сделать, это не имеет OPT1 ByVal как строку, ByVal op2 ..... Если я говорю 100 цветов, как я делаю функция есть 100 неавтоматического, и есть на 100 события «случая» без ввода всего этого?

Мне кажется, мне нужна петля и, может быть, массив, но кроме этого, я в тупике.

Спасибо.

ответ

1

Сначала используйте параметр ParamArray. Затем используйте класс Random, чтобы получить случайный элемент. Я бы использовал верхний, если вы собираетесь называть этот метод несколько раз за короткое время.

Function ChooseOne(ParamArray opts() As String) 
    Static rnd As New Random 
    Return opts(rnd.Next(0, opts.Count)) 
End Function 

Или еще проще!

Function ChooseOne(ParamArray opts() As String) 
    Return opts(New Random().Next(0, opts.Count)) 
End Function 
+0

Я думаю, что стоит отметить, что ваш простой метод не подходит для случаев, когда 'ChooseOne' можно назвать несколько раз в течение очень короткого периода времени (обычно 15 мс), как это, скорее всего, вернуть одинаковое значение серверного времени. В общем, я предпочитаю ваш первый метод. – Blackwood

+1

Да, я почти прокомментировал это для аспекта семени. Спасибо за внимание. @Черное дерево – OneFineDay

Смежные вопросы