2013-03-27 53 views
0

我想知道我怎麼可以在我的列表框中得到8張獨一無二的隨機數,到目前爲止的代碼:唯一的隨機號碼列表框中

lbLeft.Items.Clear(); 
Random rnd = new Random(); 
int n = rnd.Next(); 
int x = 8; 

do 
{ 
    lbL.Items.Add(rnd.Next(0, 20)); 

} while ((lbLeft.Items.Count != x)); 

它填充有8張隨機數列表框,但我需要他們唯一的。

任何幫助將不勝感激,

+0

我想了解'unique'和'random'之間的區別,不一樣嗎?那麼每次將項目添加到列表框時,如何檢查唯一性? – Sinatr 2013-03-27 13:26:24

回答

4

在代碼中添加此檢查:if(!lbl.Items.Contains(n))

lbLeft.Items.Clear(); 
Random rnd = new Random(); 
int n = rnd.Next(); 
int x = 8; 

do 
{ 
    n = rnd.Next(0, 20); 
    if(!lbl.Items.Contains(n)) 
     lbL.Items.Add(n); 

} while ((lbLeft.Items.Count != x)); 
+0

這是最適合我的解決方案,比很多! – user2022298 2013-03-28 11:11:23

6
HashSet<int> uniques = new HashSet<int>(); 
Random random = new Random(); 
while(uniques.Count!= 8) 
{ 
    uniques.Add(random.Next(0,20)); //terrible upper bound 
} 

Set將保證副本可能不包含在其中。

+4

這個問題被標記爲'C#'而不是'Java',你的意思是'HashSet '?另外,您在添加電話時缺少右括號。 – DGibbs 2013-03-27 13:29:06

+0

@D Gibib當然。幸運的是另有5人能夠看到'Java'和'C#'之間的相似之處。但是,要提供最**正確的答案,需要改變什麼? – Woot4Moo 2013-03-27 13:32:51

+2

@ Woot4Moo'uniques.add(random.Next(0,20);'應該'uniques.add(random.Next(0,20));'對於初學者;) – Nolonar 2013-03-27 13:35:49

0
lbLeft.Items.Clear(); 
Random rnd = new Random(); 

for (int i = 0; i < 8; i++) 
{ 
    n = rnd.Next(0, 20); 
    while(lbLeft.Contains(n.ToString()) 
    { 
     n = rnd.Next(0, 20); 
    } 
    al.Add(n); 
    lbL.Items.Add(n.ToString()) 
} 
1

您可以從0創建一個列表,N,從列表中選擇一個隨機的,刪除它,減一的最大值。通過這種方式,你知道你只會經過看x次。

lbLeft.Items.Clear(); 
    Random rnd = new Random(); 
    int x = 8; 
    int upperBound = 20; 
    List<int> uniqueInts = new List<int>(upperBound); 
    for (int i = 0; i < upperBound; i++) 
     uniqueInts.Add(i); 

    for (int i = 0; i < x; i++) 
    { 
     int index = rnd.Next(0, uniqueInts.Count); 
     lbLeft.Items.Add(uniqueInts[index]); 
     uniqueInts.RemoveAt(index); 

    }