如何让C#产生不重复的随机数
4个回答
展开全部
这个问题在CSDN、StackOverFLow上都有相关内容,最后的结论是同样的,即:
“随机数 和 不重复 是相悖的两个概念”。因此这个问题理论上无解。
随机数,(一般C#中)指的是随机生成的一个整型或者浮点型数字。
不重复,指的是在一个数组中,每个元素都有唯一性。
(我们比方说,要生成10个不重复的随机数)
如果在一个范围内生成多个随机数, 那么肯定是会有生成“重复”的几率, 如果要做到不重复,1、要么每次生成时,对范围进行重新判定,
2、要么是生成后,比对已生成的数据,如果相同就重新生成。
无论哪一种做法,都可以实现“生成一组看似随机的不重复数据”,但是这个不能叫“随机数”。
1、的做法是指定新范围,从边界规避掉重复的可能性,所以这一组10个数据其实取值范围是不同的,因为不能叫做“同一组随机数”。
2、的做法其实是会生成重复随机数的, 只是我们把它过滤掉了,因此也不是“不重复随机数”。
所以这个问题如果不去钻牛角尖,有这么两种简单做法去实现,如果严谨的去探讨,其实是个悖论。
“随机数 和 不重复 是相悖的两个概念”。因此这个问题理论上无解。
随机数,(一般C#中)指的是随机生成的一个整型或者浮点型数字。
不重复,指的是在一个数组中,每个元素都有唯一性。
(我们比方说,要生成10个不重复的随机数)
如果在一个范围内生成多个随机数, 那么肯定是会有生成“重复”的几率, 如果要做到不重复,1、要么每次生成时,对范围进行重新判定,
2、要么是生成后,比对已生成的数据,如果相同就重新生成。
无论哪一种做法,都可以实现“生成一组看似随机的不重复数据”,但是这个不能叫“随机数”。
1、的做法是指定新范围,从边界规避掉重复的可能性,所以这一组10个数据其实取值范围是不同的,因为不能叫做“同一组随机数”。
2、的做法其实是会生成重复随机数的, 只是我们把它过滤掉了,因此也不是“不重复随机数”。
所以这个问题如果不去钻牛角尖,有这么两种简单做法去实现,如果严谨的去探讨,其实是个悖论。
展开全部
如果你的随机数是整数,那么不可能不重复。随机数的产生次数,超过了整数的范围,必然会出现重复。如果不考虑范围的问题,每次产生随机数后,把它记下来,用于检查下次随机数是否重复。
如果不是整数,你可以用GUID来避免重复
如果不是整数,你可以用GUID来避免重复
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要不重复的话,就用GUID类把
Guid g = Guid.NewGuid(); //创建一个Guid的对象
Console.WriteLine(g.ToString());//然后ToString() 你用控制台输出看看,这种随机产生的十六进制数字,会重复的几率几乎没有。
Guid g = Guid.NewGuid(); //创建一个Guid的对象
Console.WriteLine(g.ToString());//然后ToString() 你用控制台输出看看,这种随机产生的十六进制数字,会重复的几率几乎没有。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询