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 个随机数填充列表框,但我需要它们唯一。

任何帮助将不胜感激,

4

4 回答 4

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保证其中不能包含重复项。

于 2013-03-27T13:23:59.797 回答
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));
于 2013-03-27T13:26:50.987 回答
1

您可以创建一个从 0 到 n 的列表,从该列表中选择一个随机数,将其删除并将您的最大值减一。这样,您就知道您只会进行 x 次 for 查找。

    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);

    } 
于 2013-03-27T13:52:17.237 回答
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())
}
于 2013-03-27T13:28:59.450 回答