2011-12-09 77 views
0

我試圖做一個老虎機程序。我試圖做的這個程序將爲3個隨機生成的數字分配一個名稱。出於某種原因,我得到一個轉換錯誤,說它不能將整數轉換爲字符串。我試圖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()之前調用Randomize()而不使用參數一次,或者如果要在每次運行時使用一個常量參數來獲得相同的僞隨機序列。 – 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我完全不明白你想要用代碼實現什麼。 '數字'數組代表什麼? – famousgarkin

+0

數字代表3種不同的老虎機結果。結果應該如下所示:櫻桃橙子酒吧或甜瓜瓜類甜瓜等 –

1

INT(6 *賽第一輪())將得到你0-5,如果你+1,然後溢出

+0

哎呀,好吧我把它改爲int(5 * Rnd())+ 1.但它仍然給我同樣的錯誤 –