Random()不生成新的随机数

时间:2013-06-08 05:50:08

标签: c# random

对此有任何帮助或见解将不胜感激。仍然是一个c#菜鸟,所以请耐心等待。这是我的问题:

List<Vector2> vectorList = new List<Vector2>();

for (int i = 0; i < 5; i++)
{
    Vector2 tempVector = new Vector2(i, i);
    vectorList.Add(tempVector);
}

这很好用,我得到的输出是5个向量,具有以下值:(0,0),(1,1),(2,2)..等等......

我需要获得随机位置,所以我自己做了一个名为RandomizePosition()的小函数。

for (int i = 0; i < 5; i++)
{
    Vector2 tempVector = RandomizePosition();
    vectorList.Add(tempVector);
}

我得到的输出是5个向量,包含所有相同的位置。我猜测有一个引用问题,或者函数只被调用一次或什么的。奇怪的是,如果我在调试模式中经历每个循环,输出就是我所期望的,5个向量具有不同的X和Y值,所以我想这个函数不是问题所在。 (或者更确切地说,它可能是,但不是其中的随机化逻辑)。

关于为什么会发生这种情况的任何想法,以及如何解决这个问题的一些见解?你不能从循环调用函数吗?或者我如何确保在每次迭代时调用该函数?谢谢!

这是RandomizePosition()函数,如果它可以帮助:

private Vector2 RandomizePosition()
{
   Random rand = new Random();

   int seedX = rand.Next(1, 14);
   int seedY = rand.Next(1, 14);

   int posX = 32;
   int posY = 32;

   if (seedX != 1)
       posX += seedX * 64;

   if (seedY != 1)
       posY += seedY * 64;

   return new Vector2(posX, posY);
}

2 个答案:

答案 0 :(得分:3)

您尚未展示自己的RandomizePosition()方法,但很可能是您在快速连续中使用相同的时间种子调用randomise,即在Random内创建RandomizePosition()对象方法。

要阻止这种情况发生,请在Random方法之外创建RandomizePosition()对象。

更新:您现在已经展示了RandomizePosition()的代码,这确实是问题所在。

正如 @dlev 所提到的,当您单步执行代码时,您看到预期行为的原因是您为新创建的Random()对象提供了足够的时间来使用新的种子(因为默认情况下它基于当前时间)。

答案 1 :(得分:1)

你已经声明了rand变量,就像这个Random rand = new Random();一样,sholud没有被完成使rand变量成为静态变量并在你的类中声明它而不是你的方法中那个时候你不会遇到这样的麻烦