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...
}

<=からへの変更<は、排他的な上限範囲を使用しているためです。

于 2012-04-09T21:14:44.770 に答える
8

の2番目の引数は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の間で2倍のパーセンテージ計算が使用されます)。

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