博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Random获得的随机数怎么样减少重复率
阅读量:5075 次
发布时间:2019-06-12

本文共 1379 字,大约阅读时间需要 4 分钟。

C#中的Random在获得随机数的时,如果你想要随机循环取得100个随机数则使用如下代码会出现大量的重复数字。代码如下:

using System;

namespace ConsoleApplication1

{   

  class Program  

     {       

     static void Main(string[] args)     

      {           

            for (int i = 0; i < 100; i++)     

             {

               Random r = new Random();      

                 double n = r.Next(100) / 100;     

               n = getr(n, r);           

           string str1 = String.Format("{0:F}", n);     

                Console.WriteLine(str1+"%");       

         }           

              Console.Read();      

         }     

        static double getr(double temp, Random r)

        {           

              while (true)

             {                

                 if (temp < 90)

                 {   temp = r.NextDouble() * 100;  }              

                else  

                 {   return temp;   }       

           }      

        }

     }

}

效果如图所示:

这是因为Random使用与时间相关的默认种子,也就是说Random在生成随机数的时候,是在一定的时间内生成的,如此由于计算机的处理速度非常的快,因此在某段时间内生成的随机数,或许会出现相同的情况。这里该怎么解决呢,首先看以下代码:

 

using System;

using System.Threading;

namespace ConsoleApplication1

{   

  class Program  

     {      

     static void Main(string[] args)     

      {          

            for (int i = 0; i < 100; i++)     

             {

             Thread.Sleep(1000);

               Random r = new Random();      

                 double n = r.Next(100) / 100;     

               n = getr(n, r);           

           string str1 = String.Format("{0:F}", n);     

                Console.WriteLine(str1+"%");      

         }           

              Console.Read();      

         }     

        static double getr(double temp, Random r)

        {           

              while (true)

             {                

                 if (temp < 90)

                 {   temp = r.NextDouble() * 100;  }              

                else  

                 {   return temp;   }       

           }      

        }

     }

}

这里我们添加了Thread.Sleep(1000);这个函数,作用就是让该线程挂起一段时间,如此一来就可以跳出Random生成随机数的时间。这样,我们再生成随机数的时候就可以减少重复的数据。

效果如图所示:

 当然解决办法不止这一个,也可以将Random放到for循环的外面,对于原因这里要待续了。。。

有谁知道的也可以赐教一下。

转载于:https://www.cnblogs.com/dolphin-gjh/p/3555052.html

你可能感兴趣的文章
程序员的数学
查看>>
聚合与组合
查看>>
数据库图片存储也读取
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
粘贴板工具,剪切板工具
查看>>
设计模式 之 享元模式
查看>>
查看数据库是否有死锁
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>