获取区间内的随机整数,出现重复的疑惑

Eric1006 2012-09-19 09:08:55
执行:
int i = 0;
while (i <= 100)
{
Random random = new System.Random();
int ran = random.Next(3);
Console.WriteLine(ran);
i++;
}
发现打印出来的随机数,都是同一个值,不得其解,求救!
...全文
173 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzelin 2012-09-19
  • 打赏
  • 举报
回复
把 Random random = new System.Random(); 放到循环外面就可以了。PS:建议你循环的中间间隔个30~50毫秒,这样出来的随机数平均分布性更好
天下如山 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
Random random = new System.Random();

这句话整个程序一般只需要一个,尤其不能放在循环里,因为随机种子是时间相关的,循环里执行的速度是很快的,得到random类实例都是一样了。

这应该是个很简单的问题吧,怎么会楼上有标有星都迷迷糊糊呢?奇怪
[/Quote]
呵呵 俺对有些问题是不去纠结的 再说俺水平不高
鲸碳耗 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

Random random = new System.Random();

这句话整个程序一般只需要一个,尤其不能放在循环里,因为随机种子是时间相关的,循环里执行的速度是很快的,得到random类实例都是一样了。

这应该是个很简单的问题吧,怎么会楼上有标有星都迷迷糊糊呢?奇怪
[/Quote]

哦~ 速度太快了 如果单步执行的话打印出来的就是不一样的了
jellyhmj 2012-09-19
  • 打赏
  • 举报
回复
我已经没再用random好久了

我拿随机数是用 Guid.NewGuid() 这个函数
它生成几乎不会重复的一个长字符串
然后我再把字符串转化成int,这里有很多种方法,不一一描述了。
hztltgg 2012-09-19
  • 打赏
  • 举报
回复
Random random = new System.Random();

这句话整个程序一般只需要一个,尤其不能放在循环里,因为随机种子是时间相关的,循环里执行的速度是很快的,得到random类实例都是一样了。

这应该是个很简单的问题吧,怎么会楼上有标有星都迷迷糊糊呢?奇怪
天下如山 2012-09-19
  • 打赏
  • 举报
回复
你把那个定义放在外面 貌似一样的概率就非常小拉。
天下如山 2012-09-19
  • 打赏
  • 举报
回复
通常我们产生随机数的时候 用循环的话 如果Random放在循环里面定义的话
Random random = new System.Random();
然后取的话,貌似是非常容易产生一样的 具体原因没研究过。
熙风 2012-09-19
  • 打赏
  • 举报
回复
List<int> num=new List<int>();
while (num.count<100)
{
Random random = new System.Random();
int ran = random.Next(3);
if(!num.Contain(num)
num.Add(ran);
}

for(int i=0;i<num.count;i++)
{
Console.WriteLine(i);
}
Eric1006 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

C# code

//
// 摘要:
// 返回一个小于所指定最大值的非负随机数。
//
// 参数:
// maxValue:
// 要生成的随机数的上限(随机数不能取该上限值)。 maxValue 必须大于或等于零。
//
//……
[/Quote]

要不全都打印0,要不全都打印1,几乎没有0、1、2间隔出现的情况。
鲸碳耗 2012-09-19
  • 打赏
  • 举报
回复

//
// 摘要:
// 返回一个小于所指定最大值的非负随机数。
//
// 参数:
// maxValue:
// 要生成的随机数的上限(随机数不能取该上限值)。 maxValue 必须大于或等于零。
//
// 返回结果:
// 大于等于零且小于 maxValue 的 32 位带符号整数,即:返回值的范围通常包括零但不包括 maxValue。 不过,如果 maxValue
// 等于零,则返回 maxValue。
//
// 异常:
// System.ArgumentOutOfRangeException:
// maxValue 小于零。
public virtual int Next(int maxValue);

输出应该是0 1 2 吧
worldhj1 2012-09-19
  • 打赏
  • 举报
回复
确实。随机种子的问题。放外面也是一样的。

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧