в C# вероятность и случайные числа
Я видел этот вопрос несколькими способами, но мне просто нужно для проверки, что я здесь делаю.
В основном я хочу вызвать событие с вероятностью 25% на основе случайного числа, сгенерированного между 1 и 100, используя:
int rand = random.Next(1,100);
достигнет ли этого следующее?
if (rand<=25)
{
// Some event...
}
Я думал, что буду использовать число от 1 до 100, чтобы я мог настроить вероятности позже - например, настроить на 23% С помощью
if (rand<=23) {...}
Спасибо, что посмотрели.
3 ответов
второй аргумент Next(int, int)
- это эксклюзивная верхняя граница желаемого диапазона результатов. Поэтому вы должны использовать это:
if (random.Next(0, 100) < 25)
или, если вы должны использовать логику на основе 1,
if (random.Next(1, 101) <= 25)
самая большая ошибка, которую вы делаете, это должно быть random.Next(0,100)
как документации
minValue: включительная нижняя граница возвращаемого случайного числа.
максвеллову: о эксклюзивные верхняя граница возвращаемого случайного числа. 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...
}
изменение <=
to <
это потому, что теперь вы используете эксклюзивный диапазон верхних границ
вы также можете использовать этот код (обычно для процентных расчетов используется double между 0 и 1):
double rand = random.NextDouble();
if(rand < .25)
{
...