如何使用BigInteger类在Java中生成随机n位整数?

时间:2010-09-14 13:55:01

标签: java biginteger digits

我不确定如何使用BigInteger类在Java中生成随机n位整数。

6 个答案:

答案 0 :(得分:12)

private static Random rnd = new Random();

public static String getRandomNumber(int digCount) {
    StringBuilder sb = new StringBuilder(digCount);
    for(int i=0; i < digCount; i++)
        sb.append((char)('0' + rnd.nextInt(10)));
    return sb.toString();
}

然后你可以使用它:

new BigInteger(getRandomNumber(10000))

答案 1 :(得分:5)

根据文档,有一个构造函数可以在java 6中执行您想要的操作:BigInteger(int, java.util.Random)

为此,您只需要添加一个随机选择的第5000位数字,即。使用rng构造函数为4999个数字,通过单独的随机过程添加最后一个。实际上,由于您只想对大值进行性能采样,您可以生成这些位,并在大端加一位,而不是从十进制表示法。

答案 2 :(得分:3)

最简单的方法可能是用5000个随机数字填充char []数组,将其转换为字符串,然后调用BigInteger(String)构造函数。

如果这些步骤中的任何一个给您带来问题,请提供更多详细信息。

或者,您可以执行以下操作:

Random rng = new Random(); // But use one instance throughout your app
BigInteger current = BigInteger.ZERO;
for (int i = 0; i < 5000; i++) {
    BigInteger nextDigit = BigInteger.valueOf(rng.nextInt(10));
    current = current.multiply(BigInteger.TEN).add(nextDigit);
}

我怀疑这样效率会低一些。

您可以使用rng.nextInt(1000000000)一次减少生成9个随机数字所需的步骤数。

答案 3 :(得分:2)

这是两个版本,一个采用Random作为参数(如果你想重新使用它):

public static BigInteger getRandomNumber(final int digCount){
    return getRandomNumber(digCount, new Random());
}

public static BigInteger getRandomNumber(final int digCount, Random rnd){
    final char[] ch = new char[digCount];
    for(int i = 0; i < digCount; i++){
        ch[i] =
            (char) ('0' + (i == 0 ? rnd.nextInt(9) + 1 : rnd.nextInt(10)));
    }
    return new BigInteger(new String(ch));
}

生成的BigInteger将始终具有指定的长度。

答案 4 :(得分:1)

如果n在1到12之间,则以下方法有帮助

private String getRandom(int length) {
    if (length < 1 && length > 12) {
        throw new IllegalArgumentException("Random number generator length should be between 1 to 12");
    }
    long nextLong = Math.abs(random.nextLong());
    return String.valueOf(nextLong).substring(0, length);
}

还有一点需要注意的是,它没有经过良好测试的代码。

答案 5 :(得分:0)

取一个包含5000位数的字符串,然后将其转换为BigInteger。