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