生成并存储范围内的唯一和随机数

时间:2014-03-22 13:18:01

标签: c# c#-4.0 random

我尝试使用以下代码生成随机数并将它们存储在c#中的HashSet中:

class program
{
  static void Main(String[] args)
  {
    Random r=new Random();
    HashSet <int> h = new HashSet<int>();
    for (int j=0;j<9;++j)
    {
  h.Add(r.Next(9));
    }
    int [] array = h.ToArray();
    foreach(int i in array)
  Console.WriteLine(i);
    Console.ReadLine();
   }
}

每次执行程序时,显示的元素数量都不同。由于我使用循环来存储9个值,因此我希望显示9个值,这是不会发生的。可能是什么错误?

1 个答案:

答案 0 :(得分:1)

HashSet不包含重复项。您的循环运行9次,但HashSet只添加了唯一的数字。将您的数字直接添加到数组中,您应该看到9个数字显示。或者使用更宽的范围来生成随机数。您可以在HashSet循环之后验证for中有多少个数字:

Console.WriteLine(h.Count);

或者,您可以像这样更改for循环:

for (int j = 0; j < 9; ++j)
{
    if(!h.Add(r.Next(9))) j--;
}