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

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

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)) 

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

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

最简单的方法可能是用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)一次生成九个随机数字所需的步骤数。

这是两个版本,一个采用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将始终具有指定的长度。

如果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); } 

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

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