微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有谁知道如何在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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。