9

我已经以多种方式看到过这个问题,但我只需要对我在这里所做的事情进行一次健全的检查。

基本上,我想根据在 1 到 100 之间生成的随机数使用以下方法触发概率为 25% 的事件:

int rand = random.Next(1,100);

以下会实现这一点吗?

if (rand<=25)
{
    // Some event...
}

我想我会使用 1 到 100 之间的数字,以便稍后调整概率 - 例如通过使用调整到 23%

if (rand<=23) {...}

谢谢参观。

4

3 回答 3

10

您犯的最大错误应该是random.Next(0,100)文档所述

minValue:返回的随机数的包含下限。

maxValue:返回的随机数的独占上界。maxValue 必须大于或等于 minValue。

强调我的,独占意味着它不包括您传入的数字,因此我的代码生成范围 0-99,而您的代码生成范围 1-99。

因此,将您的代码更改为

int rand = random.Next(0,100)

if (rand < 25) //25%
{
    // Some event...
}

//other code
if (rand < 23) //23%
{
    // Some event...
}

<=to的变化<是因为您现在正在使用独占上限范围

于 2012-04-09T21:14:44.770 回答
8

的第二个参数Next(int, int)是所需结果范围的唯一上限。因此,您应该使用这个:

if (random.Next(0, 100) < 25)

或者,如果您必须使用基于 1 的逻辑,

if (random.Next(1, 101) <= 25)
于 2012-04-09T21:13:44.767 回答
8

您也可以使用此代码(通常用于百分比计算,使用 0 和 1 之间的两倍):

double rand = random.NextDouble();
if(rand < .25)
{
...
于 2012-04-09T21:17:03.733 回答