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までのリストを作成し、そのリストからランダムに選択して削除し、最大値を1つ減らすことができます。このようにして、ルックを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);

    } 
于 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 に答える