跟踪rng输出值

时间:2019-01-27 23:16:54

标签: c#

我已经管理了一个随机数生成器来模拟掷骰子300次。现在,我想比较结果,看看它到底有多随机。

class RngPract
{
    public void RunProgram()
    {
       int i;
       Random rollingDie = new Random ();
       Console.WriteLine("Numbers 1 to 6");
       for (i =0; i < 200; i++)
       {
        Console.WriteLine("Next is: {0}", rollingDie.Next(1,7));

       int a = 0;
       switch (rollingDie.Next())
      {
          case 1:
               a++;
               Console.WriteLine("1 appears:{0}",a);
               break;
}
}
}
}

我无法让switch语句执行任何操作。

1 个答案:

答案 0 :(得分:3)

您可以将随机生成的值存储在列表中,然后查询出现的情况。

可以通过按值分组并找到每个组中的项目数来查询每个数字的出现。

例如,

public void RunProgram()
{
   int i;
   Random rollingDie = new Random ();
   Console.WriteLine("Numbers 1 to 6");
   var list = new List<int>();
   for (i =0; i < 200; i++)
   {
       var newItem = rollingDie.Next(1,7);
       list.Add(newItem);
       Console.WriteLine("Next is: {0}", newItem);
   }
   foreach(var item in list.GroupBy(x=>x))
   {
        Console.WriteLine($"{item.Key} {item.Count()}");
   } 

}

如果您需要提供事件的实时更新(每次随机生成一个数字),则可以执行以下操作。

public void RunProgram()
{
   int i;
   Random rollingDie = new Random ();
   Console.WriteLine("Numbers 1 to 6");
   var list = new List<int>();
   for (i =0; i < 200; i++)
   {
    var newItem = rollingDie.Next(1,7);
    list.Add(newItem);
    Console.WriteLine("Next is: {0}", newItem);
    var occurance = FindOccurance(list,newItem);
    Console.WriteLine($"{newItem} has occured {occurance} times");
   }

}

public int FindOccurance(List<int> list,int currentItem)
{
    return list.Count(x=>x == currentItem);
}