c#概率和随机数

Cdr*_*lak 7 c# random probability

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

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

int rand = random.Next(1,100);
Run Code Online (Sandbox Code Playgroud)

以下是否会实现这一目标?

if (rand<=25)
{
    // Some event...
}
Run Code Online (Sandbox Code Playgroud)

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

if (rand<=23) {...}
Run Code Online (Sandbox Code Playgroud)

谢谢参观.

Sco*_*ain 8

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

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

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

Emphisis mine,exclusive表示它不包含您传入的数字,因此我的代码生成范围0-99,您的代码生成范围1-99.

所以将代码更改为

int rand = random.Next(0,100)

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

//other code
if (rand < 23) //23%
{
    // Some event...
}
Run Code Online (Sandbox Code Playgroud)

从更改<=<是因为您现在使用的是独占上限范围


pho*_*oog 5

第二个参数Next(int, int)是所需结果范围的排他上限.因此你应该使用这个:

if (random.Next(0, 100) < 25)
Run Code Online (Sandbox Code Playgroud)

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

if (random.Next(1, 101) <= 25)
Run Code Online (Sandbox Code Playgroud)


And*_*day 5

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

double rand = random.NextDouble();
if(rand < .25)
{
...
Run Code Online (Sandbox Code Playgroud)

  • 现在,我们都更聪明:-) (2认同)