c#里用了random了,具体如下:
        Random k = new Random();
        int testkind;
        testkind = k.Next(2);
      请问一下这个随机数是固定的还是会改变的?另外,随了十几次,发现出现零的概率远大于一啊,大约8:2的样子,有什么改进的方法让它出现得均匀一些?

解决方案 »

  1.   

    public static void A()
            {
                //throw new Exception("aaa");
                Random r = new Random();
                int n = 0;
                for (int i = 0; i < 100; i++)
                {
                     n += r.Next(2);
                }
                MessageBox.Show(n.ToString());
            }结果:53
      

  2.   

    public static void A()
            {
                //throw new Exception("aaa");
                
                int n = 0;
                for (int i = 0; i < 100; i++)
                {
                    Random r = new Random();
                     n += r.Next(2);
                }
                MessageBox.Show(n.ToString());
            }
    结果0
      

  3.   

     Random k = new Random(DateTime.Now.Millisecond);
     int testkind;
     testkind = k.Next(0,2);
     试试
      

  4.   

      public static void A()
            {
                //throw new Exception("aaa");
                
                int n = 0;
                for (int i = 0; i < 100; i++)
                {
                    System.Threading.Thread.Sleep(100);
                    Random r = new Random();
                     n += r.Next(2);
                }
                MessageBox.Show(n.ToString());
            }
    结果:46
      

  5.   

    所以结论是:对于同一台机器的Random,其随机值依赖于时间
    你在很短的时间内迅速执行得到的Random值会一样解决办法:
    1:给Random另一个 随机值
    2:让同一个Random生成(Random每生产一次,内部状态会变化)
    3:休息一会(System.Threading.Thread.Sleep(100);)
      

  6.   


    “Random r= new Random(); ” 显然应该写在for之外才对。怎么能每一次都new一个新的r对象呢?显然这100次都应该是针对同一个r去顺序的下一个随机数。比较可靠的写法是定义为static变量。
      

  7.   

    Random r = new Random();
    int result = 0;
    int i = r.Next(1,100);
    if(i<=50) {
        result = 0;
    } else {
        result = 1;
    }
    0跟1的概率都为50%