【问题标题】:C# random number problemC#随机数问题
【发布时间】:2011-08-02 07:17:31
【问题描述】:

我有这段代码应该生成 1 到 100 之间的数字:

int aux;
aux = Game1.rand.Next(101);
if (aux <= 20)
{
     Trace.WriteLine(aux);
     seeker = true;
}

问题是我每次都得到小于 20 的值。如果我在 if 语句中将 20 更改为 30,我总是得到小于或等于 30 的数字。 我该如何克服这个问题? 谢谢。

【问题讨论】:

  • 也许你真的很倒霉?
  • 你停得太快了。继续增加它直到达到 100。下一个要解决的问题是摆脱零。

标签: c# random numbers


【解决方案1】:

您需要将您的Trace.WriteLine(aux); before 放在if 语句中,以便它写出任何超过 20(或 30,视情况而定)的数字是):

int aux;
aux = Game1.rand.Next(101);
Trace.WriteLine(aux);

if (aux <= 20)
{
  seeker = true;
  //...
}

【讨论】:

  • 谢谢。你的建议帮助我找到了真正的问题:)
【解决方案2】:

试试类似的东西

int aux;
aux = Game1.rand.Next(101);
Trace.WriteLine(aux);

你得到低于或等于 20 的值仅仅是因为你有 if() 子句确切地说你需要低于或等于 20 的值。

【讨论】:

  • 如果我这样做,它会正确生成从 1 到 100 的随机数。但我需要那个 if 语句。我需要一个对象有 20% 的机会改变一些属性...
  • 好的,我需要该类的每个对象,以使某个属性有 20% 的机会为真。关于我如何做到这一点的任何其他建议?
  • 甚至不问“什么类?”,我认为问题在于您执行以下操作:创建类的各种实例,每个实例都有一个计时器,因此所有计时器大致同时构建。如果是这样,它们都将生成相同的数字。您应该生成一次 RNG,然后从所有对象中调用它的接口。
  • 不,我有一个非常简单的错误......无论如何都修复了它。谢谢。
  • @sorin 没有你已经这样做的代码,因为它只会在数字小于或等于 20 out of 100 (20/100) = 20% 时进入 if 块...
猜你喜欢
  • 1970-01-01
  • 2012-04-13
  • 2011-05-21
  • 2012-09-16
  • 2017-04-10
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多