何らかの機能が呼び出される確率は100で1になる必要があります。今私は次のコードを使用していますが、それは1%よりも頻繁に呼び出されています。方法の呼び出し1回100回
int randomItem = (int)(Math.random()*100);
if (randomItem >= 90 && randomItem <= 100)
{
// Do something ...
}
何らかの機能が呼び出される確率は100で1になる必要があります。今私は次のコードを使用していますが、それは1%よりも頻繁に呼び出されています。方法の呼び出し1回100回
int randomItem = (int)(Math.random()*100);
if (randomItem >= 90 && randomItem <= 100)
{
// Do something ...
}
で
randomItem >= 90 && randomItem <= 100
を交換する必要があります。 Math.random()が< 0.01
かどうかをテストするだけです。
あなたは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)
の整数を与えます。
整数に変換する必要がない場合は、それ以外の場合は必要ありません。
あなたは乱数これは10%のチャンスを作る90から100の間にあるときは、スプライトを追加している
randomItem == 99
100になることはありません。 –
が同意、固定... – dbf
今は1の10のチャンスがあります。 1 100でのチャンスを得るために次の操作を行います。また
Math.Random() <= 0.01
:
int chance = (int)(100*Math.random())
if (chance == 1) {
//Code
}
Math.Random
はあなたのコードはやや次のようになりたい1%の確率を取得するには1と0の間の数を返します。 Random
クラスのnextDouble
メソッドも同様に使用されます。
r.nextDouble() < 0.01; //r is a instance of Random
これらの両方が1%のチャンスを与えます。
これは、これらすべての中から最良のソリューションですか?だから、これはどのようにして100チャンスの1を与えるのでしょうか?そして、100チャンスで20に変更したいと言っていますか?私はそれを<.20に変更するのですか? –
はい、それは<0.20 – dbf
でなければなりません。javadocは次のように言います:*正の符号、0.0以上1.0未満のdouble値を返します。返された値は、その範囲から(ほぼ)一様分布で疑似ランダムに選択されます。 *。そう、はい、あなたは<0.01の確率で1%の確率、それが0.2未満の確率は20%です。 –