2016-09-21 2 views
0

Я пытаюсь создать программу для случайного генерации имени из массива торта rota. Кажется, я не могу заставить его работать. В настоящее время в окне сообщения отображается случайное число, а не имя, хранящееся в массиве. Помоги пожалуйста!Произвольно сгенерировать элемент из массива VB

Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim strNames(18) As String 
     Dim frances, emma, piotr, jake, jess, jonah, john, flynn, will, nick As String 

     strNames(0) = "frances" 
     strNames(1) = "emma" 
     strNames(2) = "piotr" 
     strNames(3) = "jake" 
     strNames(4) = "jess" 
     strNames(5) = "jonah" 
     strNames(6) = "john" 
     strNames(7) = "flynn" 
     strNames(8) = "will" 
     strNames(9) = "nick" 


     Dim rnum As Integer 
     Dim temp As String 
     For i = 0 To 18 
      strNames(i) = i 
     Next i 

     Randomize() 
     For i = 0 To 9 
      rnum = Int(Rnd() * (UBound(strNames) - LBound(strNames) + 1) + LBound(strNames)) 
      temp = strNames(i) 
      strNames(i) = strNames(rnum) 
      strNames(rnum) = temp 
     Next i 


     For i = 0 To 9 
      MessageBox.Show(strNames(i)) 
     Next i 

    End Sub 
+1

Вы, кажется, не выбирая случайное имя из массива, по всей видимости, шаркая массив, в странном и, вероятно, неправильно (ключ разница в том, что 'rnum' должен зависеть от' i'). См. [Как перетасовать массив в VB?] (Http://stackoverflow.com/q/23576469/11683) или [Перетасовка массива строк в vb.net] (http://stackoverflow.com/q/29358857/11683). – GSerg

ответ

2

Линия

For i = 0 To 18 
     strNames(i) = i 
    Next i 

устанавливает значения strNames к ряду.

вынимают и это, кажется, работает

Dim strNames(18) As String 
    Dim frances, emma, piotr, jake, jess, jonah, john, flynn, will, nick As String 
    frances = "frances" 
    emma = "emma" 
    piotr = "piotr" 
    jake = "jake" 
    jess = "jess" 
    jonah = "jonah" 
    john = "john" 
    flynn = "flynn" 
    will = "will" 
    nick = "nick" 
    strNames(0) = frances 
    strNames(1) = emma 
    strNames(2) = piotr 
    strNames(3) = jake 
    strNames(4) = jess 
    strNames(5) = jonah 
    strNames(6) = john 
    strNames(7) = flynn 
    strNames(8) = will 
    strNames(9) = nick 


    Dim rnum As Integer 
    Dim temp As String 


    Randomize() 
    For i = 0 To 9 
     rnum = Int(Rnd() * (UBound(strNames) - LBound(strNames) + 1) + LBound(strNames)) 
     temp = strNames(i) 
     strNames(i) = strNames(rnum) 
     strNames(rnum) = temp 
    Next i 


    For i = 0 To 9 
     MessageBox.Show(strNames(i)) 
    Next i 
+0

Большое спасибо – fox

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