生成随机数并插入到数组中而不重复

时间:2012-09-06 06:19:02

标签: c# arrays random

  

可能重复:
  Random number generator in C# - unique values

我正在尝试编写一个生成随机数的C#程序,检查这个数字是否在我的数组中,如果是,重复生成数字,否则将此数字插入我的[i]个插槽中阵列。

到目前为止,这是我的代码:

        int check = 0;


        Random rand = new Random();

        int[] lotto = new int[6];



        for (int i = 0; i < lotto.Length; )
        {
            check = rand.Next(1, 41);
            while (!(lotto.Contains(check)))
            {

                lotto[i] = check;
                i++;
            }

            Console.WriteLine("slot " + i + " contains " + check);

        }
        Console.Read();
    }

更新:谢谢你想出来了,用while替换了if:)

3 个答案:

答案 0 :(得分:1)

我猜你的问题是什么不起作用,我猜你已经忘记了一个!并使用了未声明的变量i

if (!lotto.Contains(check)) // Ensure the number has not been chosen
{
    lotto[count] = check; // Set the number to its correct place
    count=count+1
}

答案 1 :(得分:0)

你可以试试这个:

for (int i = 0; i < lotto.Length;) 
{
  check = rand.Next(1, 41);
  Console.WriteLine("Random number to be checked is -> "+check);

  if (!lotto.Contains(check))
  {
     lotto[i] = check;
     i++;
  }

  Console.WriteLine("slot " + i + " contains " + check);
}

请注意,我已从for语句中删除了i ++,并将其放在if块中。

您也可以尝试使用其他循环结构,但这是为了对代码进行最少量的编辑。

编辑:

好吧,我尝试了代码,似乎对我有用。这是完整的代码:

int check = 0;

int[] lotto = new int[6];

Random rand = new Random();

for (int i = 0; i < lotto.Length; )
{
    check = rand.Next(1, 41);
    Console.WriteLine("Random number to be checked is -> " + check);

    if (!lotto.Contains(check))
    {
        lotto[i] = check;
        i++;
    }

    Console.WriteLine("slot " + i + " contains " + check);
}

Console.ReadKey();

您还可以使用while构造:

int check = 0;

int[] lotto = new int[6];

Random rand = new Random();

int i = 0;

while (i < lotto.Length)
{
    check = rand.Next(1, 41);
    Console.WriteLine("Random number to be checked is -> " + check);

    if (!lotto.Contains(check))
    {
        lotto[i] = check;
        i++;
    }

    Console.WriteLine("slot " + i + " contains " + check);
}

Console.ReadKey();

基本上,这与前面的代码功能相同。

答案 2 :(得分:0)

如果要生成无重复的随机数,请使用FIPS 140-2验证的随机数生成器(请参阅http://www.hhs.gov/ocr/privacy/hipaa/administrative/securityrule/fips1402.pdf第36页第4.9.3节)。

如果这被用于任何严肃的游戏目的,正如您的变量命名所暗示的那样,我建议使用比Random更好的随机性。