实现java.util.Random.nextInt
发布时间:2020-05-24 10:46:11 所属栏目:Java 来源:互联网
导读:此函数为 java.util.Random.它返回一个均匀分布在0和给定n之间的伪随机int.不幸的是我没有得到它. public int nextInt(int n) { if (n = 0) throw new IllegalArgumentException(n must be positive); if ((n -n) == n) // i.e
|
此函数为
public int nextInt(int n) {
if (n <= 0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e.,n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits,val;
do {
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
return val;
}
我的问题是: >为什么要特别处理n是两个权力的情况?只是为了表演吗? 解决方法接下来生成随机位.>当n为2的幂时,可以通过产生随机比特来产生该范围内的随机整数(我假定始终生成31并抛出一些用于重现性).这个代码路径比较简单,我想这是一个比较常用的例子,所以在这种情况下,值得一个特殊的“快速路径”.>当n不是2的幂时,它会将数字丢弃在范围的“顶”,使得随机数均匀分布.例如.想象我们有n = 3,想象我们使用3位而不是31位.所以位是从0到7之间随机产生的数字.那么你可以在那里生成一个公平的随机数吗?答案:如果位为6或7,我们将其丢弃并生成一个新的. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
