标签:
假设希望产生位于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到某个上界的随机数功能。
标准的类库经过测试,而且一旦发现缺陷,会在下个版本修正,程序员如果不持续关注,可能连方法实现细节被修改过也不会发现。
标签:
原文地址:http://www.cnblogs.com/13jhzeng/p/5759179.html