问题描述
这是生成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);
}