2016-09-21 6 views
0

케이크 로타 배열에서 임의로 이름을 생성하는 프로그램을 만들려고합니다. 나는 그것이 작동하도록 할 수 없습니다. 현재 메시지 상자에는 배열에 저장된 이름 대신 임의의 숫자가 표시됩니다. 도와주세요!배열에서 요소를 무작위로 생성 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

관련 문제