如何让C#产生不重复的随机数

 我来答
376710727
2016-11-09 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1278万
展开全部
这个问题在CSDN、StackOverFLow上都有相关内容,最后的结论是同样的,即:
“随机数 和 不重复 是相悖的两个概念”。因此这个问题理论上无解。

随机数,(一般C#中)指的是随机生成的一个整型或者浮点型数字。
不重复,指的是在一个数组中,每个元素都有唯一性。

(我们比方说,要生成10个不重复的随机数)
如果在一个范围内生成多个随机数, 那么肯定是会有生成“重复”的几率, 如果要做到不重复,1、要么每次生成时,对范围进行重新判定,
2、要么是生成后,比对已生成的数据,如果相同就重新生成。
无论哪一种做法,都可以实现“生成一组看似随机的不重复数据”,但是这个不能叫“随机数”。
1、的做法是指定新范围,从边界规避掉重复的可能性,所以这一组10个数据其实取值范围是不同的,因为不能叫做“同一组随机数”。
2、的做法其实是会生成重复随机数的, 只是我们把它过滤掉了,因此也不是“不重复随机数”。

所以这个问题如果不去钻牛角尖,有这么两种简单做法去实现,如果严谨的去探讨,其实是个悖论。
cooke1234
2016-11-09 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3607万
展开全部
如果你的随机数是整数,那么不可能不重复。随机数的产生次数,超过了整数的范围,必然会出现重复。如果不考虑范围的问题,每次产生随机数后,把它记下来,用于检查下次随机数是否重复。
如果不是整数,你可以用GUID来避免重复
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hgxnjtu
2017-01-17
知道答主
回答量:6
采纳率:0%
帮助的人:4365
展开全部
static double buf = 0.5;
private static double ran()
{
double num = 0.1;
do
{Random ranNum = new Random();
num = ranNum.NextDouble();
}
while (Math.Abs(num - buf) < 0.000001);
buf = num;
return (num);
}
//0.00001表示接近于0的实数(伊普斯龙)
//主程序调用 ran()即可,例如: r=ran();
==================分割线====================
如果程序较小:可以如下
private static double ran()
{
Random ranNum = new Random();
double num = ranNum.NextDouble();
Thread.Sleep(20);
return(num);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暖兰菲
推荐于2018-05-17 · 超过23用户采纳过TA的回答
知道答主
回答量:113
采纳率:0%
帮助的人:49.3万
展开全部
要不重复的话,就用GUID类把
Guid g = Guid.NewGuid(); //创建一个Guid的对象

Console.WriteLine(g.ToString());//然后ToString() 你用控制台输出看看,这种随机产生的十六进制数字,会重复的几率几乎没有。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式