2017-11-23 3 views
0

私は乱数を生成するプログラムで作業しています。私はビルド番号を生成する際にランダムを使用しています。私はランダムには限界があるのだろうかと疑問に思っていますか?私のコードは事前に感謝しています。ランダムには制限がありますか?

Private Sub agenerate_Click(sender As Object, e As EventArgs) Handles agenerate.Click 
    Dim rand As New Random 
    abuildnumber.Text = rand.Next 
    Dim exist As String = String.Empty 
    exist &= "select * from stocks " 
    exist &= "where [email protected]" 
    Using conn As New SqlConnection("server=WIN10;user=admin;password=12345;database=pc_parts") 
     Using cmd As New SqlCommand 
      With cmd 
       .Connection = conn 
       .CommandType = CommandType.Text 
       .CommandText = exist 
       .Parameters.AddWithValue("@build", abuildnumber.Text) 
      End With 
      Try 
       conn.Open() 
       Dim reader As SqlDataReader = cmd.ExecuteReader 
       If reader.HasRows Then 
        reader.Close() 
        abuildnumber.Text = rand.Next 
       End If 
       abrand.Enabled = True 
       apart.Enabled = True 
       aquantity.Enabled = True 
       aday.Enabled = True 
       amonth.Enabled = True 
       ayear.Enabled = True 
       add.Enabled = True 
       conn.Close() 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     End Using 
    End Using 
End Sub 
+0

正確には何か?問題の完全かつ明確な説明を提供してください。あなたが生成することができる乱数の数を意味するなら、それはあなたが言うべきです。 – jmcilhinney

+0

ランダムインスタンスの制限。プログラムのプロセスは、それをレコードに追加する前に在庫のビルド番号を生成します。何十年もプログラムが実行されていれば、番号がなくなるでしょうか? – Ndrangheta

+0

実際には意味がありません。それは、岩に限界があるかどうかを尋ねるようなものです。 'Random'インスタンスはです。岩の大きさには限界がありますが、特定の岩を投げることができる範囲には限界がありますが、岩には限界があるということは意味がありません。それは限界がある岩について何かでなければならない。同様に、「ランダム」オブジェクトが限定されているとは、意味がありません。オブジェクトの特定の特性や動作の制限のみが理にかなっています。あなたはどんな特徴や行動を心配していますか? – jmcilhinney

答えて

0

それはあなたが求めているものだ場合Randomは、数字の「切れない」んが、それは重複を生成しますです。新しいRandomインスタンスを毎回作成することは避けてください。可能性のあるすべての値にランダムに分布する数字が少なくなる可能性があります。あなたは乱数の単一のソースを作成し、それを再作成せずに毎回描画する必要があります。あなたの例では、クラスレベルのフィールドがうまくいくはずです。

「ランダムな」数字だけに興味があり、重複の可能性が非常に低い場合は、Guidを調べるとよいでしょう。


あなたのコード行abuildnumber.Text = rand.NextはあなたがOffからOption Strictセットを持っていることを示し、主にいる私には関係別の問題が含まれていません。これは、非常にあなたが避けるためにあなたの最も難しい試みをしなければならない悪い習慣です。コードが複雑になると追跡が難しい微妙なバグが導入される可能性があります。

Usingステートメントでうまくいっています! SqlConnectionSqlCommandの両方で正しく使用していることに感銘しました。ほとんどの人は後者を見逃しています。

+0

しかし、私は重複を避けるためにこのコードを使用しています。 DimリーダーAs SqlDataReader = cmd.ExecuteReader if reader.HasRows Then reader.Close() abuildnumber.Text = rand.Next – Ndrangheta

0

はい、乱数には制限があります。その戻り値INTのでので、intデータ型ごととしての限界は

パラメータ

のminValue タイプ:可能System.Int32 乱数を含む下限が返さ。

maxValueの タイプ:可能System.Int32 乱数の排他的な上限が返されます。 maxValueはminValue以上でなければなりません。

戻り値型:

可能System.Int32 A 32ビットのminValueにより大きい整数 又は等しい署名し、maxValueのより小さい。つまり、 の戻り値の範囲には、maxValueではなくminValueが含まれます。 minValueが maxValueに等しい場合、minValueが返されます。

ここで参考https://msdn.microsoft.com/en-us/library/2dx6wyd4(v=vs.100).aspx

関連する問題