代码改变世界

有关诡异的随机数问题

2011-03-18 20:58  随风浪迹天涯  阅读(368)  评论(6编辑  收藏  举报

昨天,在写一个有关验证码框的程序,我想的是用把26个字母用一个字符串装起来,然后用随机数,随机从1 到26取出一个数来,然后再在到字符串中取出这个字符,连续取四次。

代码如下:

     string strCode = "ABCDEFHIGKLMNOPQRSTUYCYZ";
        System.Text.StringBuilder sb = new System.Text.StringBuilder();  
        for (int i = 0; i < 4; i++)
        {
            Random rom = new Random();
            int strNum = rom.Next(1, strCode.Length);
            char strArray = strCode[strNum];
            sb.Append(strArray);
        }
        Response.Write(sb);

我原本想这个代码其实很简单,可是很纠结的是,后来一查看,发现每次点击的时候都是获取四个一样的值。本能上的反应说,就是看看程序本身有没有错,设置断点进行调试。

可是,很遗憾的是,调试没错,可以很正确很乖的输出正确的4位的随机数,可是每次运行的时候,它的诡异就出来了,就会出来四个一样的字母,而且每次都一样。

我看了很久,然后突然想到我的一位认识我的同学说,定义随机数不能再循环里面,而要放在外面。然后,我就照着这个想法实现了一下,如下:

string strCode = "ABCDEFHIGKLMNOPQRSTUYCYZ";
System.Text.StringBuilder sb
= new System.Text.StringBuilder();  
     Random rom = new Random();
for (int i = 0; i < 4; i++)
{

int strNum = rom.Next(1, strCode.Length);
char strArray = strCode[strNum];
sb.Append(strArray);
}
Response.Write(sb);

这样就没没有错误了!

其实,到现在,我还不能确切这个问题哪里出错了。如果有谁知道,还是请高手给我解答下,在下不胜感激。不过,博主还是建议各位以后写这样的代码的时候多注意些。