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 使用 of 识别的错误Random.Next(0,1)

于 2012-06-13T17:03:11.023 回答
0

尝试

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