在java中使用隨機工具時,會得到如下所示的一些數字:1271,34556,177等等......使數字不重複的最簡單方法是什麼?如何在Java中使用非重複數字生成隨機數字?
回答
如何創建一個循環來檢查生成的隨機數是否符合您的要求。
final Random rnd = new Random();
int n;
do {
n = rnd.nextInt(1000);
} while(containsRepeatingDigits(n));
containsRepeatingDigits
可以是這樣的:
boolean containsRepeatingDigits(final int n) {
final boolean digits[] = new boolean[10];
for(char c : String.valueOf(n).toCharArray()) {
final int i = c-'0';
if(digits[i])
return true;
digits[i] = true;
}
return false;
}
您可以將數組[1,2,3,4,5,6,7,8,9]洗牌並讀取爲數字。
如果您不想修復數字位數或允許非前導零,它會變得更加複雜(如果您關心某種平均分配)。
謝謝,這非常有幫助!你看,我剛剛對java很陌生,並且正在寫我的第一個「正確」程序。 – user2582956
您可以使用數字0-9
初始化List
。然後隨機化這個列表,並從這個列表中輪詢隨機數量的元素(1到9之間)。將這些數字連接起來,並將您的號碼設爲非重複數字。
隨機數量的元素是棘手的。如果你使用天真的分配方式,你會得到比你想要的短得多的數字(少於10%的所有數字,最多10位數字只有一位數字,但最終可能會達到10%)。 – Thilo
您可以檢查隨機數是否有重複數字,如果有,則生成一個新數字。它是用C#編寫的,但你應該可以很容易地將它轉換成Java。
private static Random rand = new Random();
public static int GenerateNumberNonRepeat()
{
int number;
do
{
number = rand.Next();
} while (IsRepeating(number));
return number;
}
public static bool IsRepeating(int number)
{
string textual = number.ToString();
for (int i = 0; i < textual.Length; i++)
{
for (int j = i + 1; j < textual.Length; j++)
{
if (textual[i] == textual[j])
return true;
}
}
return false;
}
這是獲得均勻分佈的最簡單方法。但是,對於大數字可能會有點緩慢。假設你想要一個小於10^10的隨機數,那麼約90%的數字是無效的。 –
的另一種方式,以產生這些數字是生成任意數,並且在情況下,它包含重複的數字或者產生一個新的,或刪除重複的數字(例如通過遞增數,直到沒有更多的重複號)。
與提議的洗牌/選擇方法相反,這具有優勢,即可以(或多或少)保留原始rng的分佈。
此代碼可以幫助你
Set set = new HashSet<Integer>();
Random rand= new Random();
public int getNonRepeatingRandomNumber() {
int intV = rand.nextInt();
if(set.contains(intV)) {
return getNonRepeatingRandomNumber();
}
else {
set.add(intV);
return intV;
}
}
- 1. Java生成非重複的隨機數
- 2. 在bash中生成非重複的隨機數字序列
- 3. 如何在類中的函數中生成非重複的隨機數字?
- 4. 在Java中生成數百萬個非重複的隨機數
- 5. 生成隨機數字而不重複
- 6. 生成非重複的隨機數
- 7. 如何在Swift中生成沒有重複的隨機數字?
- 8. 在Python中 - 如何生成不重複的隨機數字
- 9. 如何在Java中使用ENUM生成隨機數字
- 10. 生成隨機但非重複數字(C++)
- 11. 如何避免隨機生成WP7中的重複數字?
- 12. 高效地生成Java中的隨機非重複數字列表
- 13. Vb.net隨機數字生成器重複相同的數字
- 14. 如何在Android中使用JSON數組生成隨機數字
- 15. 如何在Android Java應用程序中隨機生成數字?
- 16. 如何防止隨機數字發生器重複數字?
- 17. 如何用arc4random生成隨機數字?
- 18. 如何生成沒有重複的隨機數字javascript
- 19. 如何防止重複隨機生成的數字
- 20. 在數組中生成隨機數字
- 21. 如何從一個範圍內生成3個非重複的隨機數字?
- 22. 在c中生成隨機數字不重複#
- 23. 在iPhone中生成沒有重複的隨機數字?
- 24. 如何在java中生成隨機數
- 25. 如何在重複調用中並行生成不相關的隨機數字?
- 26. 生成唯一的隨機數字JAVA
- 27. 如何在Java中生成一個隨機的9位數字?
- 28. 如何在java中生成100個隨機3位數字?
- 29. 如何在GREL中使用GoogleRefine或OpenRefine生成隨機數字?
- 30. 使用R隨機生成數字
你能不能讓我們知道目的是什麼? – Reddy
@cathulhu:它看起來不同,因爲不是數字本身不應該重複,而是生成的數字中的數字。 – flolo
@cathulhu,謝謝你。這是今天學到的一個很好的算法:) – Reddy