JAVA認證培訓(xùn)輔導(dǎo):隨機整數(shù)的生成

字號:

使用Java 2 SDK基礎(chǔ)類庫產(chǎn)生隨機數(shù)的方法很多。但是如果你跟不上這些類庫的更新腳步,你有可能正在使用的是一種低效的隨機數(shù)生成機制,更糟糕的是:你有可能得到的不是均勻分布的隨機數(shù)。本文將向你展示一種較為可靠的隨機數(shù)生成方法,同時與其他方法進行比較。
    自從JDK最初版本發(fā)布起,我們就可以使用java.util.Random類產(chǎn)生隨機數(shù)了。在JDK1.2中,Random類有了一個名為nextInt()的方法:
    public int nextInt(int n)
    給定一個參數(shù)n,nextInt(n)將返回一個大于等于0小于n的隨機數(shù),即:0 <= nextInt(n) < n。
    你所要做的就是先聲明一個Random的對象,在調(diào)用其nextInt(n)函數(shù)以返回隨機值。
    這里有個示例,下面的代碼段將生成很多隨機數(shù)并輸出它們的平均值:
    以下是引用片段:
    int count = 1000000;
    int range = Integer.MAX_VALUE / 3 * 2;
    double sum = 0;
    Random rand = new Random();
    for (int i=0; i
    sum += rand.nextInt(range);
    }
    System.out.println(sum/count);
    執(zhí)行了1000000次循環(huán)之后,得到的平均值基本上就處于隨機數(shù)范圍的中點(midpoint)。
    到目前為止,事情還并不復(fù)雜,但是我們會問為什么要使用nextInt(n)?考慮一下的隨機數(shù)生成方法:
    (1)使用老的方法nextInt(),沒有制定數(shù)值范圍
    (2)用Math.abs()靜態(tài)函數(shù)得到(1)中產(chǎn)生值的絕對值
    (3)對(2)的結(jié)果進行取模運算(%),得到期望范圍類的值