第47条:了解和使用类库

假设希望产生位于0到某个上界之间的随机整数。可能会这样编写:

private static final Random rnd = new Random();
static int random(int n){
    return Math.abs(rnd.nextInt()) % n;
}

测试随机性:

public static void main(String[] args) {
    int n = 2 * (Integer.MAX_VALUE / 3);
    int low = 0;
    for(int i=0; i < 1000000; i++)
        if(random(n) < n/2)
            low++;
}   

结果接近于666666,由random方法产生的数字有2/3在取值范围的前半部分。

 

编写一个随机数生成的方法需要了解关于随机数生成器、数论和2的求补算法的相关知识。

现有的类库提供随机数生成的方法,不需要自己来做这样的工作,Random.nextInt(int)就实现产生0到某个上界的随机数功能。

标准的类库经过测试,而且一旦发现缺陷,会在下个版本修正,程序员如果不持续关注,可能连方法实现细节被修改过也不会发现。

posted @ 2016-08-10 22:53  没有梦想的小灰灰  阅读(211)  评论(0编辑  收藏  举报