我不确定如何使用BigInteger类在Java中生成随机n位整数。
答案 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。