如何使随机检查更有效率

时间:2016-09-19 21:34:22

标签: java algorithm optimization random

您好我正在尝试创建一个程序来检查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]);
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

如果你真的想缩短代码,试试这个:

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

从1到10000的IntStream就像for循环一样,对于每个这样的数字,你做同样的事情,在数组中的相应索引处增加值。然后你只需要使用流打印该数组。当然你需要保留你的getFirstDecimal方法,因为这个代码在里面使用这个方法,你可以从该方法中提取代码到流,但它看起来很难看,我觉得最好有一个单独的方法。