写软件首当其冲的是算法,可能是我的数学头脑实在不咋地,GGJJ给我讲了半天都没明白,最后对着人家用JAVA写好的软件楞了半天,总算是把道理想明白了。
软件编写期间遇到不少问题,可能是我只读了《C#入门经典》(而且半途还荒废了),本来想去网上找找源码,看看别人的思路,结果找了半天也只有编译好的,总不能让我看反汇编后的代码吧...|| 最后只能不会用的控件等价替换,一个方法不行用另一个。条条大路都能溜达到罗马嘛~
程序写完了,这里给大家一点提醒,也当是给自己留个映像
1.随机数生成方法:
以下有两段代码
protected void randomText()
{
int count = 1;
int Ascran = 0;
Random ran = new Random();
special = pic.Asc[ran.Next(11)];
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 11; j++)
{
Ascran = Convert.ToInt32(ran.Next(11));
........
}
}
}
另一段:
protected void randomText()
{
int count = 1;
int Ascran = 0;
special = pic.Asc[ran.Next(11)];
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 11; j++)
{
Random ran = new Random();
Ascran = Convert.ToInt32(ran.Next(11));
........
}
}
}
看似这两段代码都没什么问题,其实两者相差甚远。看过《计算机程序设计艺术-随机数生成》的可能知道计算机的伪随机,编译一下你就能发现第一段的生成的随机数差异很大,而第二段的随机数来来去去都差不多,甚至一下99个都一样
这是为什么呢?小弟看《计算机程序设计艺术》也是昏头昏脑,如有小错还请见谅。计算机的随机数都是通过一定算法得来的,与时间来一起随机是最最能接近真随机的,但是这样的随机无法指定最大数,所以C#中有一个重载方法,random对象有一个next方法可以指定最大数,但是这个方法已经不是和时间来随机了。所以当初始化时提供形参相同时很容易产生随机出来的数字相同。
所以我们必须把初始化随机数放在循环外面,这样就能让后面的“随机数”和前面的差异开。为什么初始化后可以变得不同可以看看《计算机程序设计艺术》一书中对冯-诺依曼随机法的评价。
另外用到的知识点有
2.控件数组的试用,这次我用的是label数组
3.tabcontrol和tabpage的知识(因为《C#入门经典》对这些资料只是一笔带过,害得我网上找得好苦,有钱了一定去买高级编程)
废话不多说了,附上下载地址:
http://cid-856b7a1fbf560755.skydrive.live.com/self.aspx/My%20free%20softwares/ReadMind.rar