Random获得的随机数怎么样减少重复率
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循环的外面,对于原因这里要待续了。。。
有谁知道的也可以赐教一下。
最新文章
- Ajax参数详解
- Python for Informatics 第11章 正则表达式一(译)
- Spring的qualifier标签
- install usb serial
- Python 通过print将数据保存到文件中
- Jsp万能密码漏洞修复例子
- Magento 切换成中文后没有数据信息解决办法
- Hbase深入学习(二) 安装hbase
- Attempt to write to field &#39;android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager&#39; on a null object reference
- 只能输入数字的文本框-php
- 安装scrapy框架的常见问题及其解决方法
- numpy 解一道简单数学题
- Linux系统编程----孤儿进程
- shell脚本简介
- dubbo 初探
- Error: [ng:areq] Argument ‘AppCtrl’ is not a function, got undefined
- Kali安装教程(VMWare)
- console.log()显示图片以及为文字加样式
- JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语
- java 并发runable,callable,future,futureTask