2016-09-19 5 views
0

こんにちは私は、Javaで乱数の分布をチェックするプログラムを作ろうとしています。 プログラムのアイデアは、(Javaを使用して)多くの乱数を生成し、次の範囲のそれぞれにあるどのように多くの番号を参照することである。ランダム性チェッカーをより効率的にする方法

  • 0.0から0.1
  • 0.1から0.2
  • 0.2から0.3

    ...

  • 0.8から0.9

  • 0.9から1.0

私はこれを行うために管理しているが、それを行うには、より効率的な/迅速な方法がある場合、私は思っていました。

public class RandomTest 
{ 
    //Get value of digit in tenths place of double 
    public static int getFirstDecimal(double num) 
    { 
     return (int) (num * 10); 
    } 

    public static void main(String args[]) 
    { 
     int[] results = new int[10]; //Results array 

     double x; //Random number holder 
     int genNum; //Number of random numbers to generate 

     for(genNum = 0; genNum < 10000; genNum++) 
     { 
      x = Math.random(); 
      results[getFirstDecimal(x)]++; 
     } 

     for(int i = 0; i < 10; i++) 
     { 
      System.out.println(results[i]); 
     } 
    } 
} 
+0

'getFirstDecimal()'はとてもシンプルで、1行のコードからしか呼び出せないので、インライン化する方が少し効率的です。 –

+3

それ以外は、何かをカットする余地がどこにあるのか、必要以上に多くの仕事をしているところはわかりません。 –

+0

数字がランダムであるかどうかはどうやって決めるのですか? –

答えて

-1

あなたが本当にコードを短くしたい場合は、これを試してください:1から10000まで

int[] results = new int[10]; 
IntStream.range(1, 10000).forEach(s -> results[getFirstDecimal(Math.random())]++); 
Arrays.stream(results).forEach(System.out::println); 

IntStreamだけforループのようなもので、これらの数字のそれぞれについて、あなたは同じことができません配列内の対応するインデックスの値をインクリメントします。次に、ストリームを使用して配列を出力します。もちろん、このコードはこのメソッドを内部で使用しているので、そのメソッドからストリームにコードを抽出することができますが、醜いと思うので、別のメソッドを持つ方が良いと思うので、メソッドを保持する必要があります。

+0

OPは*短縮*コードではなく*短縮*コードを要求しています。 – Linus

関連する問題