私は C# を学習しており、プログラム内に乱数ジェネレーターを保持するクラスを作成しました。
class RandomNumberGenerator
{
Random RNG = new Random();
// A bunch of methods that use random numbers are in here
}
このクラス内には、RNG を使用するいくつかのメソッドがあります。データは、プログラムの他の部分からここに送信され、処理されてから返されます。メソッドの 1 つは、次のことを行います。
// Method works something like this
int Value1 = RNG.Next(x, y);
int Value2 = RNG.Next(x, y);
int Value3 = RNG.Next(x, y);
、値はx
、y
別のクラスからここに送信されます。そのため、そのクラス内に のインスタンスを作成して、RandomNumberGenerator
そのメソッドを呼び出して x 値と y 値を渡す必要があります。
class DoStuff
{
RandomNumberGenerator Randomizer = new RandomNumberGenerator
// Here I call a bunch of Randomizer methods that give me values I need
}
上記の方法の問題は、3 つの値すべてに対して毎回同じ数値が得られることです。それらが非常に近くにあり、のシード値が変更される時間がないためか、クラスRandomizer
の新しいインスタンスを作成するときに何か間違ったことをしているためかどうかはわかりません。RandomNumberGenerator
私はすでにここで多くの回答を調べてきましたが、通常、このような問題は、Random
メソッドを実行するときに多くの新しいオブジェクトを作成する人々によるものです (したがって、それらすべてのシードを同じ値に設定します) が、Random
私が唯一の新しいオブジェクトcreate はRandomNumberGenerator
クラス内にあります。次に、それを他のクラス内でインスタンス化して、データを渡し、そのメソッドを使用できるようにします。
なぜこれが起こっているのですか?どうすれば修正できますか?