2011-04-01 4 views
10

ランダムに時間のxパーセントのコマンドを実行する数行のJavaコードが必要です。Java:時間のx%何かを行う

擬似コード:

boolean x = true 10% of cases. 

if(x){ 
    System.out.println("you got lucky"); 
} 

答えて

16

もしによっては、

Random r = new Random(); 

... 
void yourFunction() 
{ 
    float chance = r.nextFloat(); 

    if (chance <= 0.10f) 
    doSomethingLucky(); 
} 
:時間
あなたが何かをしたいようにコードは、を実行されていることを 回を意味し、コードブロック内で、それが倍の10%に実行されたブロック全体が実行されて、あなただけのような何かを行うことができます

もちろん、0.10fの略です10%ですが、調整することができます。すべてのPRNGアルゴリズムと同様に、これは平均的な使用法によって機能します。 yourFunction()が妥当な時間量と呼ばれない限り、10%に近づくことはありません。

+3

" nextFloat() 'はゼロになり、比較は厳密により小さいはずです。つまり、 '<='の代わりに '<'を使用します。もちろん、 'float'の代わりに' nextInt(10) 'を使用した場合、コードについて正しく考えるのがずっと簡単になります。 – erickson

+2

これは間違っています。浮動小数点数は正確な数値ではないため、この状況での厳密な比較を使用しても何も変更されません。また、ランダムシーケンスはint値から生成されるためです。私はちょうど<演算子を使用するとより正確な(約10%に近い)結果が得られることを示すスニペットを提供することに挑戦します:) – Jack

+0

あなた自身を試してください:http://www.pastie.org/1744784 – Jack

26

あなたはちょうどこのような何か必要があります:あなたは34%のような何かをしたい場合は

import java.util.Random; 

public class Rand10 { 
    public static void main(String[] args) { 
     Random rand = new Random(); 
     int lucky = 0; 
     for (int i = 0; i < 1000000; i++) { 
      if (rand.nextInt(10) == 0) { 
       lucky++; 
      } 
     } 
     System.out.println(lucky); // you'll get a number close to 100000 
    } 
} 

:ここではそれを測定し、完全な例です

Random rand = new Random(); 

if (rand.nextInt(10) == 0) { 
    System.out.println("you got lucky"); 
} 

rand.nextInt(100) < 34を使用できます。

あなたは、10%が相対的な尺度であるため、最初に「時間」を定義する必要が
0

...

例えばxは5秒ごとに真です。

または、1から10まで一様にサンプリングする乱数ジェネレータを使用し、 "1"をサンプリングすると常に何かを実行できます。

0

あなたは常に乱数を(デフォルトでは、それは私は信じて0と1の間である)を生成し、それが< = 0.1であるかどうかを確認でき、再度、これは一様にランダムではない....

2

Randomを使用できます。それをシードしたいかもしれませんが、デフォルトではしばしば十分です。

Random random = new Random(); 
int nextInt = random.nextInt(10); 
if (nextInt == 0) { 
    // happens 10% of the time... 
} 
0
public static boolean getRandPercent(int percent) { 
    Random rand = new Random(); 
    return rand.nextInt(100) <= percent; 
} 
1

あなたはこの試みることができる:ベースとして、あなたのコードを取るために


public class MakeItXPercentOfTimes{ 

    public boolean returnBoolean(int x){ 
     if((int)(Math.random()*101) <= x){ 
      return true; //Returns true x percent of times. 
     } 
    } 

    public static void main(String[]pps){ 
     boolean x = returnBoolean(10); //Ten percent of times returns true. 
     if(x){ 
      System.out.println("You got lucky"); 
     } 
    } 
} 
+0

'≤'でも動作しますか? – michaelb958

+0

いいえ、間違いでした。 –

+0

これは問題ではありません。非ランダムなバイアスを導入するように、 '.random()'の呼び出し結果を 'int'にキャストしないでください。そのようなバイアスを正しく処理する '.nextInt() 'のような適切な' Random'メソッドを使用してください。 – dimo414

3

を、あなたは、単にそのようにそれを行うことができます:

if(Math.random() < 0.1){ 
    System.out.println("you got lucky"); 
} 

をFYI Math.random()は、静的を使用しています例:Random

関連する問題