2016-08-19 18 views
0

コードを実行するたびにRandomInt1とRandomInt2が常に同じ番号になるのはなぜですか?私が作成する乱数の両方が、ビジュアルベーシックで毎回同じになるのはなぜですか?

Dim RandomGen1 As New Random 
    Dim RandomInt1 As Integer 
    RandomInt1 = RandomGen1.Next(2, 7) 

    Dim RandomGen2 As New Random 
    Dim RandomInt2 As Integer 
    RandomInt2 = RandomGen2.Next(2, 7) 
+0

あなたの問題とは無関係ですが、多くの関連する変数で同じことをしているときは、配列やその他のデータ構造の使用について考えるべきです。 – jsheeran

答えて

4

マインド吹いて楽しい事実:コンピュータでtruly乱数のようなものは存在しない、この概念の.NETフレームワークの実装では、あなたの問題に関係しています。

.NETを使用してプログラムを起動すると、(特定のスコープ内で)作成する各乱数ジェネレータは、同じ番号のシーケンスを生成します。結果のシーケンスは、プログラムが起動したときに、インスタンスによって何らかの形で選択されたシードによってすでに決定されています。この種から始まる任意のランダム化は、同じシーケンス番号を生成する。それは運命だ。

解決策は、「発電機」(または「運命プロセッサー」)を1つだけ使用して、新しい番号が必要な場合は.Nextメソッドを呼び出してください。あなたのプロジェクトはクールだと思うが、できるだけ明確になるように投稿を編集した。幸運:

Dim RandomGen1 As New Random 
    Dim RandomInt1 As Integer 
    RandomInt1 = RandomGen1.Next(2, 7) 

    'notice I did not make a RandomGen2, it will just give me the same numbers as RandomGen1 
    Dim RandomInt2 As Integer 
    RandomInt2 = RandomGen1.Next(2, 7) 
+1

技術的には、数字はあらかじめ決められていません。返される数字の大きなファイルやデータベースはありません。それらは、与えられたシードから常に同じシーケンスを返す方法で数学的に生成されます。 –

+1

OK、それらは数式とシードによって決まりますか?あらかじめ決められた? c'mon:)srsly – montewhizdoh

+1

一種の数字のシーケンスは、プログラムの起動時には必ずしも分かっていません。シードは、タイマーのようなソースまたはユーザ入力からプログラム的に提供することができる。 –

関連する問題