我已经通过多种方式看到了这个问题,但我只需要对我在这里做的事情进行健全检查。
基本上我想根据1到100之间产生的随机数使用以下方法触发概率为25%的事件:
int rand = random.Next(1,100);
以下是否会实现这一目标?
if (rand<=25)
{
// Some event...
}
我以为我会使用1到100之间的数字,所以我可以稍后调整概率 - 例如使用
调整为23%if (rand<=23) {...}
谢谢你看看。
答案 0 :(得分:8)
您所犯的最大错误是random.Next(0,100)
int rand = random.Next(0,100)
if (rand < 25) //25%
{
// Some event...
}
//other code
if (rand < 23) //23%
{
// Some event...
}
minValue:返回的随机数的包含下限。
maxValue:返回的随机数的独占上限。 maxValue必须大于或等于minValue。
Emphisis mine,独有意味着它不包含您传入的数字,因此我的代码生成范围0-99,您的代码生成范围1-99。
所以将代码更改为
<=
从<
到{{1}}的更改是因为您现在使用的是独占上限范围
答案 1 :(得分:5)
Next(int, int)
的第二个参数是所需结果范围的exclusive upper bound。因此,您应该使用此:
if (random.Next(0, 100) < 25)
或者,如果必须使用基于1的逻辑,
if (random.Next(1, 101) <= 25)
答案 2 :(得分:5)
您也可以使用此代码(通常用于百分比计算,使用0到1之间的双倍):
double rand = random.NextDouble();
if(rand < .25)
{
...