C# 抽奖列表验证

C# 抽奖列表验证,c#,random,arraylist,C#,Random,Arraylist,我正在制作一个抽奖c#程序,其中随机抽取1-10个数字,并将其放入ArrayList中,如果该数字已经抽取,则不应将其放入数组中……我的问题是,即使我验证了它,它仍然会添加到数组中 这是我的密码: Console.WriteLine("RAFFLES"); ArrayList array = new ArrayList(); Random rnd = new Random(); ret: Console.Write("Press 1 to draw"); int draw = int.Pars

我正在制作一个抽奖c#程序,其中随机抽取1-10个数字,并将其放入
ArrayList
中,如果该数字已经抽取,则不应将其放入数组中……我的问题是,即使我验证了它,它仍然会添加到数组中

这是我的密码:

Console.WriteLine("RAFFLES");
ArrayList array = new ArrayList();
Random rnd = new Random();

ret: Console.Write("Press 1 to draw");
int draw = int.Parse(Console.ReadLine());

switch(draw)
{
     case 0: break;
     case 1:

         if (array.Contains(rnd.Next(1, 11)))
         {
             Console.WriteLine("Already Exist");                        
         }
         else
             array.Add(rnd.Next(1, 11));

         goto ret;

     case 2: 

         foreach (var a in array)
            Console.WriteLine(a);
          break;
}

您应该将第一个
rnd存储在变量中。下一个(1,11)

int x = rnd.Next(1, 11);
if (array.Contains(x))
{
     Console.WriteLine("Already Exist");
}
else
     array.Add(x);

您没有存储的结果

rnd.Next(1, 11)
因此,当它点击else语句时,它会再次运行rnd.next(),以绕过您的检查获得一个新的数字

应该是:

case 1:
    int rndNumber = rnd.Next(1,11);
    if (array.Contains(rndNumber))
    {
        Console.WriteLine("Already Exist");
    }
    else
        array.Add(rndNumber);

通常情况下,您会洗牌并根据需要取尽可能多的值(如果您正确地编写代码,还可以通过“checkif-take”避免最后的无限循环)。否则,请逐步通过代码并提出。你的goto让我想呕吐。=)我不确定它是否达到呕吐的程度,但它确实让我的胃不稳定,可能会变得更糟。我相信(根据此作业通常的设置方式)OP也需要
,而
生成随机数-否则它不会画任何东西。