2

可能重复:
C# 中的随机数生成器 - 唯一值

我正在尝试编写一个生成随机数的 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 :)

4

3 回答 3

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
}
于 2012-09-06T06:43:31.287 回答
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();

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

于 2012-09-06T06:49:33.323 回答
0

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

如果这被用于任何严肃的游戏目的,正如您的变量命名所暗示的那样,我会推荐比Random.

于 2012-09-06T06:52:15.450 回答