嗨,我使用隨機類獲取隨機數,但我的要求是一旦它產生一個不應該再次重複請幫助我。如何通過在c#中使用隨機類來避免重複數字?
1
A
回答
2
保留生成的數字列表並在返回下一個隨機前檢查此列表。
既然你沒有指定一個語言,我會使用C#
List<int> generated = new List<int>;
public int Next()
{
int r;
do { r = Random.Next() } while generated.Contains(r);
generated.Add(r);
return r;
}
+0
是的,這是我能想到的唯一可靠的方式,+1 – 2011-04-09 05:01:53
1
下面的C#代碼演示瞭如何獲得7張隨機卡,沒有重複。這是當你的隨機數的範圍爲1至64個,併爲整數使用最有效的方法:
ulong Card, SevenCardHand;
int CardLoop;
const int CardsInDeck = 52;
Random RandObj = new Random(Seed);
for (CardLoop = 0; CardLoop < 7; CardLoop++)
{
do
{
Card = (1UL << RandObj.Next(CardsInDeck));
} while ((SevenCardHand & Card) != 0);
SevenCardHand |= Card;
}
如果隨機數範圍大於64,則下一個最有效的方式來獲得隨機數不任何重複從這個C#代碼如下:
const int MaxNums = 1000;
int[] OutBuf = new int[MaxNums];
int MaxInt = 250000; // Reps the largest random number that should be returned.
int Loop, Val;
// Init the OutBuf with random numbers between 1 and MaxInt, which is 250,000.
BitArray BA = new BitArray(MaxInt + 1);
for (Loop = 0; Loop < MaxNums; Loop++)
{
// Avoid duplicate numbers.
for (; ;)
{
Val = RandObj.Next(MaxInt + 1);
if (BA.Get(Val))
continue;
OutBuf[Loop] = Val;
BA.Set(Val, true);
break;
}
}
這種技術的缺點是它傾向於使用更多的內存,但它應該是比其他方法顯著更快,因爲它沒有通過大看容器每次獲得一個隨機數。
相關問題
- 1. 避免隨機重複
- 2. 如何避免隨機生成WP7中的重複數字?
- 3. 避免重複數學隨機
- 4. 避免生成重複的隨機數
- 5. 通過傳遞值來避免重複
- 6. 避免重複隨機顏色
- 7. 如何避免並確保我的隨機數不重複..?
- 8. 如何使c#隨機數重複
- 9. 如何避免隨機UI?
- 10. 如何避免重複的隨機數並在android中選擇另一個?
- 11. 如何避免Java中的「重複類」
- 12. 如何避免顯示從隨機圖像腳本重複?
- 13. 如何使用php來避免數據庫重複?
- 14. 爲了避免在C++中重複數組中的數字
- 15. 如何避免重複數據輸入通過PHP到MySQL?
- 16. 避免重複錄入,通過軌道
- 17. Rails has_many通過避免重複
- 18. 如何生成隨機數字,同時避免已使用的數字
- 19. 如何避免使用C#中的枚舉重複代碼?
- 20. 避免在jQuery中重複使用.click()
- 21. 避免在YUI3中重複使用JavaScript
- 22. 避免Linq在C#中重複組
- 23. 避免重複使用jquery
- 24. 如何避免在GROUP_CONCAT中重複?
- 25. 如何避免在oracle中重複?
- 26. 如何避免字符串重複
- 27. C#避免重複邏輯
- 28. C#試圖避免重複
- 29. C#避免重複代碼
- 30. 如何避免在字符串數組中重複輸入?
如果這是您的要求,爲什麼您首先使用隨機? – jfs 2011-04-09 04:53:19