gpt4 book ai didi

c# - Random() 不生成新的随机数

转载 作者:行者123 更新时间:2023-11-30 20:57:13 26 4
gpt4 key购买 nike

如果您对此有任何帮助或见解,我们将不胜感激。仍然有点 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 个向量,包含所有相同的位置。我猜测存在引用问题,或者该函数只被调用一次或类似的东西。奇怪的是,如果我在 Debug模式下通过每个循环,输出是我所期望的,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);
}

最佳答案

您还没有显示您的 RandomizePosition() 方法,但您很可能正在快速连续调用具有相同时间种子的随机化,即创建 Random RandomizePosition() 方法中的对象。

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

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

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

关于c# - Random() 不生成新的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com