в 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)
{
...