-1

可能重复:
如何在 Java 中生成随机 BigInteger 值?

我在 JAVA 中使用 BigInteger 类,我想从1 to x-1. 我不知道该怎么做?

我不能使用nextInt(),因为它只接受int不接受BigIntegers,我将生成 32 位及以上的数字,所以,甚至nextInt()不会工作。

我知道如果我搜索我可能会找到一些有用的解决方案,但我的时间太短了。(截止日期前2小时)

提前致谢。

4

2 回答 2

1

愿这项工作

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("9349988899999");
        BigInteger bigInteger1 = bigInteger.subtract(new BigInteger("1"));
        System.out.println(randomBigInteger(bigInteger1));
    }

    public static BigInteger randomBigInteger(BigInteger n) {
        Random rnd = new Random();
        int maxNumBitLength = n.bitLength();
        BigInteger aRandomBigInt;
        do {
            aRandomBigInt = new BigInteger(maxNumBitLength, rnd);
            // compare random number lessthan ginven number
        } while (aRandomBigInt.compareTo(n) > 0); 
        return aRandomBigInt;
    }
于 2012-12-22T19:47:49.933 回答
0

只需使用get的构造函数Random

Random rnd = new Random();
BigInteger i = new BigInteger(maxNumOfBits, rnd);

如果您想要介于 0 和某个数字之间,您可以生成与该数字相同的位数并生成随机数,直到您得到比它少的一位。

(代码未测试)

public static BigInteger randomBigInteger(BigInteger maxNum) {
    Random rnd = new Random();
    int maxNumBitLength = maxNum.bitLength();
    BigInteger rndNum;
    do {
        rndNum = new BigInteger(maxNumBitLength, nd);
    } while(result.compareTo(upperLimit) >= 0);
    return result;
}
于 2012-12-22T19:07:02.973 回答