有谁知道如何在Java中的特定位中生成数字?

问题描述

这是生成1到10之间的随机数的代码:

int a = (int)(Math.random() * 10) + 1;

但是我一直在想,如果我想随机产生一个100位数字怎么办?我该如何使用BigInteger数据类型?

解决方法

新答案:

BigInteger类具有可用于生成random number with the given number of bits的构造函数。这是您可以使用的方式:

BigInteger random(int bits) {
    Random random = new Random();
    return new BigInteger(bits,random);
}

原来的答案,并且反复进行相同的操作:

java.util.Random类具有nextBytes方法,用于用随机值填充字节数组。您可以使用它生成具有任意字节数的BigInteger

复杂的是,当位数不是8的倍数时该怎么办?我的建议是生成一个字节过多,并通过移位操作除去多余的位。

BigInteger random(int bits) {
    Random random = new Random();
    // One byte too many if not multiple of 8
    byte[] bytes = new byte[(bits + 7) / 8];
    random.nextBytes(bytes);
    BigInteger randomNumber = new BigInteger(1,bytes);
    // Get rid of extra bits if not multiple of 8
    return randomNumber.shiftRight(bytes.length*8 - bits);
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...