簡體   English   中英

如何使隨機性檢查器更有效

[英]How to make a randomness checker more efficient

您好,我正在嘗試編寫一個程序來檢查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]);
        }
    }
}

如果您確實想縮短代碼,請嘗試以下操作:

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方法,因為此代碼在內部使用此方法,您可以將代碼從該方法提取到流中,但是看起來很難看,我認為最好為此使用一個單獨的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM