zoukankan      html  css  js  c++  java
  • 有关诡异的随机数问题

    昨天,在写一个有关验证码框的程序,我想的是用把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);

    这样就没没有错误了!

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

  • 相关阅读:
    基于Debian的发行版Linux系统安装包命令
    戴尔服务器如何配置远程管理卡(IDRAC9)适用于戴尔R740服务器
    Tracert 命令
    Ubuntu 18.04 进入单用户模式修改密码
    华为eNSP模拟器— telnet实验
    华为交换机Console口属性配置
    Ubuntu 16.04 Bridge配置
    Ubuntu 16.04 配置单网卡绑定多IP
    springboot搭建web项目与使用配置文件
    读书笔记《SpringBoot编程思想》
  • 原文地址:https://www.cnblogs.com/damonlan/p/1988318.html
Copyright © 2011-2022 走看看