请问各位C#高手Random类如何使用!
小弟我初学C#,想产生随机数并保存在数组中,但是每次产生的随机数都是相同的,以下是我写的代码,请高手改正!谢谢!using System;
namespace Test4
{
public class MyClass
{
public static void Main(string[] args)
{
Console.Write("请输入要产生随机数的个数:");
uint n = uint.Parse(Console.ReadLine());
uint[] num=new uint[n];
for (int i = 0; i < n; i++)
{
Random rnd = new Random();
num[i] = (uint)(rnd.Next(0,100));
}
Console.WriteLine("产生的随机数为:");
for (int i = 0; i < num.Length; i++)
{
Console.Write(num[i] + " ");
}
bool flag = false;
Console.Write("\n请输入一个要查找的数:");
uint search = uint.Parse(Console.ReadLine());
for (int i = 0; i < num.Length; i++)
{
if (search == num[i])
{
flag = true;
Console.Write("\n在数组的第{0}个位置找到了{1}", (i + 1), search);
}
}
if (!flag)
{
Console.WriteLine("数组中没有这个数!");
}
Console.ReadLine();
}
}
} --------------------编程问答-------------------- http://www.cnblogs.com/doll-net/archive/2008/03/08/Random.html --------------------编程问答-------------------- 《一种生成不重复数的算法》:
在编程中经常遇到一些类似的问题,比如做一个双色球选号软件,其中6个双色球是从1到33之间选出6个数来,这6个数是不能重复的,这个问题就是我们今天要说的生成不重复数算法。
算法描述如下:从M个数中选出N个数来(0 <N <=M),要求N个数之间不能有重复。
这个问题我以前用J2SE实现过,使用了ArrayList,每次随机在指定范围内选定一个数,然后查看结果集合中是否存在该数,如果存在继续下一轮循环,如果不存在,就将该数保存到结果集合中去。使用这种算法虽然也能实现要求,缺点是判断结果集合中是否存在该数时,需要通过一个循环来判断,这会增加算法运行的时间,虽然时间复杂度为n,但多次重复,还是一笔不小的开销。
下面要介绍的算法是,每次随机取出一个数,之后将该数放置到集合的末尾去,这样下次取随机数的时候,只从1到目标集合个数-1个中随机抽取,如此循环,这样就避免了判断在结果集合中判断是否存在相冲突的数的过程。
http://blog.csdn.net/zhoufoxcn/archive/2007/10/24/1842175.aspx --------------------编程问答-------------------- for (int i = 0; i < n; i++)
{
Random rnd = new Random();
num[i] = (uint)(rnd.Next(0,100));
}
改成就可以了 (移到循环外):
--------------------编程问答-------------------- 解释:
Random rnd = new Random();
for (int i = 0; i < n; i++)
{
num[i] = (uint)(rnd.Next(0,100));
}
Random rnd = new Random(); 该命令用当前的时间作为种子来开始一系列'伪'随机数。
由于循环运行很快,在循环中构建的Random都具有相同的种子,他们生成的系列也就相同了。
--------------------编程问答-------------------- Random rnd = new Random();
for (int i = 0; i < n; i++)
{
num[i] = (uint)(rnd.Next(100));
}
--------------------编程问答-------------------- 谢谢各位高手的指点,小弟不胜感激 --------------------编程问答-------------------- 先介绍一下C#生成一个随机数的方法:
Random rdm = new Random();
int b = rdm.Next(0,100); //从0到100的随机数
要生成即包含字符又包含数字的字符串也很简单,有一个方法:System.Guid.NewGuid()
System.Guid.NewGuid().ToString().Substring(0, 6); //随机生成6位即包含字符又包含数字的字符串
--------------------编程问答-------------------- Random rnd = new Random();
放在for语句上面即可 --------------------编程问答-------------------- 参考代码,
DateTime dateTimeMin = Convert.ToDateTime("2007-1-1");
DateTime dateTimeMax = Convert.ToDateTime("2007-12-31");
TimeSpan ts = dateTimeMax - dateTimeMin;
Random r = new Random();
int t1 = r.Next(1,(int)ts.TotalDays);
DateTime newDT = dateTimeMin.Add(new TimeSpan(t1, 0, 0, 0));
DateTime newDT = dateTimeMin + new TimeSpan(t1, 0, 0, 0);//或这种方式 --------------------编程问答-------------------- 把Random r = new Random();改为带有种子的如下
Random r = new Random(DateTime.Now.Millisecond*DateTime.Now.Second);
--------------------编程问答-------------------- 把Random r = new Random();写在循环里,由于CPU太快而随机数的种子是当前时间,所以每次使用的种子都一样(产生的随机数的个数比较小的时候),产生的随机数就一样了。 --------------------编程问答-------------------- 学习。。。。。。。。 --------------------编程问答--------------------
。 --------------------编程问答-------------------- 这帖可真有年头了... --------------------编程问答--------------------
学习了~ --------------------编程问答-------------------- 12楼挖坟,鉴定完毕 --------------------编程问答--------------------
正解 --------------------编程问答-------------------- Console.Write("请输入要产生随机数的个数:");
uint n = uint.Parse(Console.ReadLine());
uint[] num = new uint[n];
Random rnd = new Random();//把这个拿出来就可以了,有的书上好象是讲过原理不记得
for (int i = 0; i < n; i++)
{
num[i] = (uint)(rnd.Next(0, 100));
}
Console.WriteLine("产生的随机数为:");
for (int i = 0; i < num.Length; i++)
{
Console.Write(num[i] + " ");
}
bool flag = false;
Console.Write("\n请输入一个要查找的数:");
uint search = uint.Parse(Console.ReadLine());
for (int i = 0; i < num.Length; i++)
{
if (search == num[i])
{
flag = true;
Console.Write("\n在数组的第{0}个位置找到了{1}", (i + 1), search);
}
}
if (!flag)
{
Console.WriteLine("数组中没有这个数!");
}
Console.ReadLine();
--------------------编程问答--------------------
好像要产生0至100的随机数
应该是:
int b = rdm.Next(0,101); //从0到100的随机数
--------------------编程问答-------------------- Random rand=new Random();
int num=rand.next(随机数的起始位置,随机数的终止位置); --------------------编程问答-------------------- (new Random(Guid.NewGuid().GetHashCode())).Next(1, 100);
补充:.NET技术 , C#