3

我有一些代码使用随机数来确定对象是否特殊。我在每隔一段时间重置的 4 个对象中的每一个上使用此代码。

Random rand = new Random();

int i = rand.Next(1, 25);

if (i == 1)
{
    thiss.typer = "boulder";
    thiss.texture = Content.Load<Texture2D>("rock");
}
else if (i == 2)
{
    thiss.typer = "ice";
    thiss.texture = Content.Load<Texture2D>("ice");
}
else if (i == 3)
{
    thiss.typer = "bomb";
    thiss.texture = Content.Load<Texture2D>("bomb");
}
else
    thiss.typer = "normal";

但是每次我执行这段代码时,当它创建 4 个对象时,当它使其中一个对象变得特别时,由于某种原因,它使它们都变得特别。这段代码有问题吗,还是我必须展示更多代码才能阐明它?

4

1 回答 1

14

我可以想到这可能发生的两个原因。

首先,也许您不小心在对象之间共享了一个引用,因此thiss.typer在所有 4 种情况下都引用了同一个对象。

其次,更有可能的是,您创建的随机对象共享相同的种子,因此 rand.Next 在所有 4 个实例中返回相同的数字。当您new Random()不使用参数时,种子基于当前系统时间。如果您快速连续多次执行此操作,则种子可能是相同的。

您可以尝试使用相同的 Random 对象,而不是每次使用时都创建一个新对象。这样,您还可以避免不必要地创建大量对象。

于 2012-05-24T10:59:11.877 回答