在这种情况下如何使用“ ++ i”?

时间:2018-07-31 12:19:24

标签: c# list random draw

我想为事件赢得一个随机名称,用户可以赢取其ID(1、2、3等)指定的项目。随机名称部分现在可以,但是如何显示结果:

The ID : 1 winner is:  'the random name'
The ID : 2 winner is:  'the random name'
etc...
till ID : 27
    static void Main(string[] args)
        {
            string[] Names = { "Erik", "Levente", "Noel", "Áron", "Krisztián", "Kristóf", "Bence", "Roland", "Máté", "László", "Bálint" ,
            "Regina", "Brigitta", "Gréta", "Hédi", "Hanna", "Boglárka", "Jázmin", "Réka", "Alexandra", "Rebeka", "Lili", "Luca", "Zsófi"};

            List<string> alreadyUsed = new List<string>();
            Random r = new Random();
            while (alreadyUsed.Count < Names.Length)
            {
                int index = r.Next(0, Names.Length);
                if (!alreadyUsed.Contains(Names[index]))
                {
                 alreadyUsed.Add(Names[index]);

                 Console.WriteLine("The ID : 1  winner is:  " + Names[index]);
                }
            }
            Console.ReadKey(true);
        }

2 个答案:

答案 0 :(得分:1)

这是一个重构的环境,没有表现不佳的alreadyUsed。首先,我对数组进行随机化,然后进行迭代,并以递增的索引/ id显示每个项目。

string[] Names = { "Erik", "Levente", "Noel", "Áron", "Krisztián", "Kristóf", "Bence", "Roland", "Máté", "László", "Bálint" ,  "Regina", "Brigitta", "Gréta", "Hédi", "Hanna", "Boglárka", "Jázmin", "Réka", "Alexandra", "Rebeka", "Lili", "Luca", "Zsófi"};
Random r = new Random();
Names = Names.OrderBy(_ => r.Next()).ToArray();
for(int i=0;i< Names.Length;i++)
{
    Console.WriteLine("The ID : " + (i+1) + " winner is:  " + Names[i]);
}

答案 1 :(得分:0)

while (alreadyUsed.Count < Names.Length)
{
    int index = r.Next(0, Names.Length);
    if (!alreadyUsed.Contains(Names[index]))
    {
        alreadyUsed.Add(Names[index]);

        Console.WriteLine("The ID : " + alreadyUsed.Count + " winner is:  " + Names[index]);
    }
}

您不需要++i,您已经拥有alreadyUsed.Count中包含的职位,并且该职位会随着您使用alreadyUsed.Add(...)而增加。

Try it online