2011-12-03 7 views
0

何らかの機能が呼び出される確率は100で1になる必要があります。今私は次のコードを使用していますが、それは1%よりも頻繁に呼び出されています。方法の呼び出し1回100回

int randomItem = (int)(Math.random()*100); 
if (randomItem >= 90 && randomItem <= 100) 
{ 
    // Do something ... 
} 

答えて

5

randomItem >= 90 && randomItem <= 100 

を交換する必要があります。 Math.random()が< 0.01かどうかをテストするだけです。

+0

これは、これらすべての中から最良のソリューションですか?だから、これはどのようにして100チャンスの1を与えるのでしょうか?そして、100チャンスで20に変更したいと言っていますか?私はそれを<.20に変更するのですか? –

+0

はい、それは<0.20 – dbf

+2

でなければなりません。javadocは次のように言います:*正の符号、0.0以上1.0未満のdouble値を返します。返された値は、その範囲から(ほぼ)一様分布で疑似ランダムに選択されます。 *。そう、はい、あなたは<0.01の確率で1%の確率、それが0.2未満の確率は20%です。 –

2

あなたはif (Math.random() * 100 >= 99.0)のような、あるいは単にスケーリング、if (Math.random() >= 0.99)なし、または整数、if (randomItem == 99)で何かを言わなければなりません。

Math.random()範囲[0.0, 1.0)における浮動小数点数を返すので、100倍これはあなたの範囲[0.0, 100.0)を与え、整数への変換は、範囲[0, 100)の整数を与えます。

整数に変換する必要がない場合は、それ以外の場合は必要ありません。

1

あなたは乱数これは10%のチャンスを作る90から100の間にあるときは、スプライトを追加している

randomItem == 99 
+0

100になることはありません。 –

+0

が同意、固定... – dbf

1

今は1の10のチャンスがあります。 1 100でのチャンスを得るために次の操作を行います。また

Math.Random() <= 0.01 

int chance = (int)(100*Math.random()) 
if (chance == 1) { 
    //Code 
} 
0

Math.Randomはあなたのコードはやや次のようになりたい1%の確率を取得するには1と0の間の数を返します。 RandomクラスのnextDoubleメソッドも同様に使用されます。

r.nextDouble() < 0.01; //r is a instance of Random 

これらの両方が1%のチャンスを与えます。

関連する問題