4

C# での乱数生成に問題があります

私が見つけたすべての解決策を試しました。ほとんどの場合、各プロパティではなく各オブジェクトのみを機能させる、毎回同じランダム オブジェクトのみを使用しています。

だから私はこれを乱数のコードとして使用しています:

private static readonly Random random = new Random();
private static readonly object syncLock = new object();

public static int RandomNumber(int min, int max)
{
            lock (syncLock)
            { // synchronize
                return random.Next(min, max);
            }
}

.Next()今度は、ランダム オブジェクトを生成するために、同じメソッドで複数回呼び出したいと思います。

public void StartDuiven()
{
   for (int i = 0; i <= 6; i++)
   {
      var d = new Duif();
      d.Naam = /*NameGenerator.GenRandomFirstName() +" "+ NameGenerator.GenRandomLastName()*/ "Jantje";
      d.GeboorteDatum = DateTime.Now;
      d.Snelheid = Genrator.RandomNumber(0, 4);
      d.Vliegtechniek = Genrator.RandomNumber(0, 4);
      d.Vormpeil = Genrator.RandomNumber(0, 4);
      d.Conditie = Genrator.RandomNumber(0, 4);
      d.Aerodynamica = Genrator.RandomNumber(0, 4);
      d.Intelligentie = Genrator.RandomNumber(0, 4);
      d.Libido = Genrator.RandomNumber(0, 4);
      d.Nachtvliegen = Genrator.RandomNumber(0, 4);
      d.Navigatie = Genrator.RandomNumber(0, 4);
      d.Ervaring = Genrator.RandomNumber(0, 4);
      d.Transfer = false;

      int g = Genrator.RandomNumber(0, 2); // Edited

      if (g == 0)
         d.Geslacht = false;
      else
         d.Geslacht = true;

      AddDuif(d);
   }
}

新しいオブジェクトごとに異なる番号を取得しますが、呼び出すたびにではありません。Next()方法。

したがって、プロパティのすべての値は、1 つのオブジェクトに対して同じになります。

どうすればこれを修正できますか? .Next()呼び出しごとに新しい値を取得できないのはなぜですか?

ありがとうございました

さよなら!

4

3 に答える 3

4

Random.Next(0, 1)常に戻り0ます。最大値は排他的です。

于 2012-06-13T16:58:44.813 に答える
2

鳩の巣原理によ​​り、[0-4)の範囲で5つの異なる整数値を取得することは困難です:)。

数値はランダムであるため、すべての値が同じになる場合がいくつかあることを期待する必要があります。

(@IngisKahnによって識別されたバグに加えてRandom.Next(0,1)

于 2012-06-13T17:03:11.023 に答える
0

試してみてください

return (random.Next() % (max - min)) + min
于 2012-06-13T17:02:02.280 に答える