如何解决有谁知道如何在Java中的特定位中生成数字?
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。