我不確定如何使用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