我不确定如何使用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))
不错,你需要一个特殊情况下的第一个数字,虽然 – 2010-09-14 15:07:09
@seanizer:如果我们想在范围1x..x - 9..9的均匀分布,那么你是对的。我假定在整个范围内均匀分布。 +1无论如何你的答案:) – 2010-09-14 15:27:02
由于某些原因,我有时会得到17而不是18的长度 – 2015-09-22 08:25:43
最简单的方法很可能是填写一个char []数组与5000个随机数字,将其转换成一个字符串,然后调用构造函数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);
}
我怀疑这会是相当低效虽然。
你可以减少通过一次产生9个随机数字所需的步骤数,与rng.nextInt(1000000000)
。
请注意,这会给你1到10^5000之间的随机分布,所以由此产生的一些数字不会是5000个数字长。如果需要5000个数字之间的均匀分布,则应将第一个数字作为rng.nextInt(9)+1选择的特殊情况。 – oksayt 2010-09-14 14:09:21
@oksayt:是的,我几乎提到了......于是决定不要那么挑剔;) – 2010-09-14 14:12:46
INT I; char [] num = new char [5000]; 随机R =新随机(); 为(I = 0; I <5000;我++){ INT J = R.nextInt(10)+ 1; num [i] =(char)j; } String s = num。的toString(); BigInteger n = new BigInteger(s); – makaveli2178 2010-09-14 15:03:42
一个字符串在其5000个数字,然后将其转换成的BigInteger。
根据该文档,有一个构造函数你在Java 6想要的东西:BigInteger(int, java.util.Random)
这一点,你只需要添加一个随机选择的第5000位,即。使用rng构造函数为4999位数,通过单独的随机过程添加最后一个数字。实际上,由于您只想对大值进行性能抽样,因此您可以生成这些位,并在大端上添加一位,而不是从端添加到十进制符号。
这给出了许多* bits *而不是* digits *,如果OP想要随机分配超过5000个数字的数字,这将使其至少*略微* fiddly ..基本上会生成一个可能太大的随机值,并且然后重复,直到有合理的一个出现。 – 2010-09-14 14:14:08
@Jon:see edit;如果op对于他的问题的“大小”意味着什么是灵活的,那么5000比特(等等)可能与5000个数字一样好。另外,我的手机很难回答问题。 – Carl 2010-09-14 14:20:52
是的,我想让数字不是位。我使用了你提到的那个构造函数,然后才意识到它只给出了一个介于0到2^numbits之间的数字 - 1,而不是5000数字整数 – makaveli2178 2010-09-14 14:29:49
这里有两个版本,一个采用随机的参数(如果你想重新使用它):
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为112之间,然后下面的方法可以帮助
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);
}
还有一点要注意的是,它没有很好的测试代码。
- 1. 如何生成n个k位数的随机整数
- 2. 生成一个N位随机数
- 3. 用N位生成一个随机整数?
- 4. 如何在Java中生成一个随机的9位数字?
- 5. 生成一个具有指定位数的随机整数Java
- 6. 如何在java中生成一个4位数的随机长整型?
- 7. 我如何使用随机类在C#中生成一个随机数(XNA)
- 8. 如何在java中生成100个随机3位数字?
- 9. 如何随机生成随机64位整数
- 10. 如何在java中生成随机数
- 11. 在随机生成50个随机数中使用随机数#
- 12. 如何在clojure中随机生成一个长整数
- 13. 如何在Haskell中随机生成一个随机生成的数字列表
- 14. 如何在C++中生成随机32位整数
- 15. 在Python中生成n维随机数
- 16. 如何从java中的m个数字列表生成n个随机数?
- 17. 如何在java中生成随机整数?
- 18. 生成随机64位整数
- 19. 如何在Perl中使用字符串作为种子生成一个N位数的随机数
- 20. Java - 如何使用随机整数生成二维数组,其网格大小为N * N(用户输入)?
- 21. 使用math.random在java中生成一定数量的随机数
- 22. 在一个范围内生成'n'个唯一随机数
- 23. 在一个范围内生成'n'唯一的随机数
- 24. Java - 有效生成随机整数
- 25. 如何生成一个具有小数位的随机数
- 26. 在c中生成整数随机数#
- 27. 使用capl生成一个随机数
- 28. 在MySql中生成一个随机和唯一的varchar(n)?
- 29. 如何在Java中使用ENUM生成随机数字
- 30. 如何生成一个随机数
嗯......最好的办法就是进行构建了完全随机的32位或64位数字。不确定API是否允许。 – 2010-09-14 13:56:29
嗯...我从来没有这样做过,但我相信,海啸提供了比我更好的解决方案。你应该接受他的回答。我想,当你说“5000位数字”时,你的意思是第一个数字不是0,我的答案不符合这个。 – 2010-09-14 21:34:00