2011-12-09 5 views
0

슬롯 머신 프로그램을 만들려고합니다. 이 작업은 임의로 생성 된 숫자에 이름을 할당하려고 시도합니다. 어떤 이유로 나는 문자열로 정수를 변환 할 수 없다는 변환 오류가 발생했습니다. 나뿐만 아니라 CSTR()를 시도했지만 문제는 문자열 문제의 정수

Sub GenerateNumbers() 
    Dim numbers(2) As Integer 
    Dim names(5) As String 
    Dim x As Integer 

    names(0) = "Cherries" 
    names(1) = "Oranges" 
    names(2) = "Plums" 
    names(3) = "Bells" 
    names(4) = "Melons" 
    names(5) = "Bar" 

    For x = 0 To 2 
     numbers(x) = names(CInt(Int((6 * Rnd()) + 1))) 
    Next x 
End Sub 

내게 오류 준다 지속 :

+1

인수없이 호출하면, 연속 임의 화()를 호출하지 마십시오으로 다시 초기화 (씨앗) 시스템 시간 난수 생성기 때문에 값이 RND에 의해 반환하는 동안 짧은에서 반복적으로 호출하는 경우() 대부분 무작위가 아닙니다. 처음에는 Rnd()를 사용하기 전에 Randomize()를 한 번 인수없이 호출하거나, 모든 실행에서 동일한 의사 임의 시퀀스를 상수 인수로 가져 오려면 처음에는 Rnd()를 사용하십시오. – user688996

+0

예, 조금 전에 알아 냈습니다. 내 문제는 지금 할당 된 텍스트 값으로 변환 할 Number1, 2 또는 3을 가져올 수 없다는 것입니다. 나는 numberx = cstr ("text")를 시도했다. 그건 물론 OP입니다. –

답변

1

names 배열에서 임의의 문자열을 얻고 그것을 정수 배열로 선언 된 numbers에 할당하려고합니다. 물론 이것은 효과가 없을 것입니다.

외에도 에릭 (Eric)이 지적한 바와 같이 범위를 벗어나는 색인에도 문제가 있습니다.


의견에 대 한 응답에서 편집 :

그냥 문자열, 같은 방법으로 결과를 저장하는 배열을 선언 할 필요가 발생하는 무작위로 생성 슬롯 머신의 텍스트 값을 얻으려면 names 선언으로 .

별도의 절차에서 결과를 얻으려면이 값을 문자열을 반환 할 수있는 절차 인 Sub에서 Function으로 변경해야합니다. 그런 다음 Main 또는 다른 프로 시저에서이 함수를 호출하고 반환 된 값을 변수에 저장할 수 있습니다.

또한 랜덤 결과 생성 부분을 수정했습니다.

Module SlotMachine 

    Sub Main() 
     Dim slotResults As String() 

     'Get the results 
     slotResults = GenerateResults() 

     'Some further processing of results here, e.g. print results to console 
     For Each item In slotResults 
      Console.WriteLine(item) 
     Next 

     'Wait for keypress before closing the console window 
     Console.ReadLine() 
    End Sub 

    'Generates random results 
    Function GenerateResults() As String() 
     Dim results(2) As String 
     Dim names(5) As String 
     Dim x As Integer 

     names(0) = "Cherries" 
     names(1) = "Oranges" 
     names(2) = "Plums" 
     names(3) = "Bells" 
     names(4) = "Melons" 
     names(5) = "Bar" 

     Randomize() 

     For x = 0 To 2 
      results(x) = names(Int(6 * Rnd())) 
     Next x 

     Return results 
    End Function 

End Module 
+0

어떻게 해결할 수 있습니까? –

+0

@ Kudla69 코드로 달성하고자하는 것을 완전히 이해하지 못합니다. 'numbers' 배열은 무엇을 표현해야합니까? – famousgarkin

+0

숫자는 3 가지 슬롯 머신 결과를 나타냅니다. 결과는 다음과 같이 나옵니다 : Cherries Oranges Bar 또는 Melons Melons Melons 등 –

1

Int 인 '정수'를 입력하는 문자열 "오렌지"에서 변환을 사용할 수 없습니다 (6 * RND())를 얻을 것이다 당신이 0-5, 만약 당신이 +1, 그 다음 오버플로

+0

oops, 괜찮습니다. int (5 * Rnd()) + 1로 변경했습니다.하지만 여전히 동일한 오류가 나타납니다. –