2011-12-09 18 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関数によって返されながら、あなたが短い中でそれを繰り返し呼び出す場合()おそらくランダムではありません。最初にRnd()を使用する前に、引数なしでRandomize()を呼び出すか、実行ごとに同じ疑似ランダムシーケンスを取得する場合は定数引数を使用します。 – user688996

+0

はい、少し前にそれを理解しました。今私の問題は、割り当てられているテキスト値に変換するNumber1,2または3を取得できないことです。私はnumberx = cstr( "text")を試しました。もちろんそれとOP。 –

答えて

1

names配列からランダムな文字列を取得していて、整数の配列として宣言されているnumbersに割り当てようとしています。もちろんこれはうまくいきません。

エリックが指摘したように、それ以外にも境界外インデックスに関する問題があります。コメントへの応答で


編集

あなただけの文字列として結果を格納する配列を宣言する必要があるものをランダムに生成されたスロットマシンの結果のテキスト値、namesが宣言されているのと同じ方法を取得するには。

は別のプロシージャから結果を取得できるようにするには、値、この場合は文字列の配列を返すことができる手順がある、FunctionSubからそれを変更する必要があります。次に、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())ではないでしょうあなたが+1してからオーバーフローした場合0-5、

+0

私はint(5 * Rnd())+ 1に変更しました。でも、それでも私には同じエラーが返されます –