首页 > 编程语言 >c#生成随机数

c#生成随机数

时间:2023-08-08 22:38:45浏览次数:47  
标签:c# Random 生成 int 随机数 new 100 Next


允许有重复:

首先初始化一个随机数发生器,可以使用两种方式:

第一种方法不指定随机种子,系统自动选取当前时间作为随机种子:

 

Random ro = new Random();

第二种方法可以指定一个int型参数作为随机种子:
  int iSeed=10;   Random ro = new Random(10);   long tick = DateTime.Now.Ticks;  Random ran = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32));

  这样可以保证99%不是一样。

之后,我们就可以使用这个Random类的对象来产生随机数,这时候要用到Random.Next()方法。这个方法使用相当灵活,你甚至可以指定产生的随机数的上下限。
不指定上下限的使用如下:

int iResult;   iResult=ro.Next();

   下面的代码指定返回小于100的随机数:
int iResult;   int iUp=100;   iResult=ro.Next(iUp);

  而下面这段代码则指定返回值必须在50-100的范围之内:
int iResult;   int iUp=100;   int iDown=50;   iResult=ro.Next(iDown,iUp);

   除了Random.Next()方法之外,Random类还提供了Random.NextDouble()方法产生一个范围在0.0-1.0之间的随机的双精度浮点数:
  double dResult;   dResult=ro.NextDouble();

 但是用Random类生成随机数,会出现重复

产生不重复的随机数:

这里从0到100范围内产生10个随机数. 如果范围和数目有变动的话,把下面的数字改成相应的数字就可以了

 方法1:思想是用一个数组来保存索引号,先随机生成一个数组位置,然后把这个位置的索引号取出来,并把最后一个索引号复制到当前的数组位置,然后使随机 数的上限减一,具体如:先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,...),将该位置的数用最后的数代替。

  

/// <summary>
        /// get different random
        /// </summary>
        /// <param name="arrNum"></param>
        /// <param name="tmp"></param>
        /// <param name="minValue"></param>
        /// <param name="maxValue"></param>
        /// <param name="ra"></param>
        /// <returns></returns>
        public int[] getNum(int count,int total)
        {
            int[] index = new int[total];
            for (int i = 0; i < total; i++)
            {
                index[i] = i;
            }
            Random r = new Random();
            //用来保存随机生成的不重复的10个数  
            int[] result = new int[count];
            //int site = total;//设置下限  
            int id;
            for (int j = 0; j < count; j++)
            {
                id = r.Next(0, total - 1);
                //在随机位置取出一个数,保存到结果数组  
                result[j] = index[id];
                //最后一个数复制到当前位置  
                index[id] = index[total  - 1];
                //位置的下限减少一  
                total --;
            }


            return result;


        }   
 

   方法2:利用Hashtable。[NextPage]
   
Hashtable hashtable = new Hashtable();
  Random rm = new Random();
  int RmNum = 10;
  for (int i = 0; hashtable.Count < RmNum; i++)
  {
      int nValue = rm.Next(100);
      if (!hashtable.ContainsValue(nValue) && nValue != 0)
      {
       hashtable.Add(nValue, nValue);
       Console.WriteLine(nValue.ToString());
      }
  } 
 

   方法3:递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。
  
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
  int[] arrNum=new int[10];
  int tmp=0;
  int minValue=1;
  int maxValue=100;
  for (int i=0;i<10;i++)
  {
    tmp=ra.Next(minValue,maxValue); //随机取数
    arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值赋到数组中
  }
  .........
  .........
  public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra)
  {
    int n=0;
    while (n<=arrNum.Length-1)
    {
      if (arrNum[n]==tmp) //利用循环判断是否有重复
      {
        tmp=ra.Next(minValue,maxValue); //重新随机获取。
        getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。 
      }
    n++;
    }
    return tmp;
  }

标签:c#,Random,生成,int,随机数,new,100,Next
From: https://blog.51cto.com/u_16218512/7013060

相关文章

  • TC脚本开发-窗口句柄的捕捉方法总结
    标题获得方法:整型窗口句柄窗口句柄=窗口.找到窗口("脚本编写算法.txt-记事本“)如果(窗口句柄==0)辅助.消息框("没有找到窗口")红色字体为窗口标题,必须输入准确的标题,不支持模糊捕捉。要找到准确的标题可以用AB抓抓捕捉.AB抓抓使用方法:先点击下图的鼠标窗口句柄。 然后点......
  • 使用ICTCLAS分词器 Java版
      ICTCLAS分词器 汉语词法分析系统ICTCLAS(InstituteofComputingTechnology,ChineseLexicalAnalysisSystem),主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。 词是最小的能够独立活动的有意义的语言成分,但汉语是以字为基本的书写单位,词语之间......
  • c#调用百度地图web服务api-----该方法可用在js跨域请求上
    百度地图Web服务API为开发者提供http接口,即开发者通过http形式发起检索请求,获取返回json或xml格式的检索数据。用户可以基于此开发JavaScript、C#、C++、Java等语言的地图应用。api官网说明链接:http://developer.baidu.com/map/webservice.htm可用接口列举:获取相关地址提示place......
  • soso地图api接口地理解析geocoder检索示例----并在信息框显示经纬度
    api官网:http://api.map.soso.com/doc_v2/example.html?sample-geocoding-simple#8map示例代码如下(保存为html打开可见效果):<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>......
  • c#怎么样让double或者float保留2位小数
      我们都知道float的位数比较多但是转成Tostring显示时还是会截断并且四舍五入。如果我们要进行精密的计算时比如计算0.9999999如果被截断了结果就会变成1。这与我们的预期结果不相符。那么我们怎么才能随心所欲的设置小数位数。可以参考下面的例子。我们以设置小数位......
  • perl通过unixODBC连接SQLServer
    本文讲述三个内容:一:说明二:环境配置三:操作脚本内容一:说明MS从来没有提供过SQLServerforLinux,所以大家也不要去尝试在Linux系统安装SQLServer,但是可以通过ODBC连接Windows系统的SQLServer数据库;WindowsServer2003用户注意:在WindowsServer2003系统上安装的SQLServer是不......
  • perl基本语言语法(与java,c#不同的地方积累)
    连接字符串 perl用.  “hello”+"hello" 可用x号 "hello"*3 “hellohellohello”java,c#用+"hello"+"hello"运算符perl等待输入:$line=<STDIN>;或者$line=<>;未定义的字符值undef--不会报错当作数字使用时为0当作字符串使用时为空判断是否为空用defined()数组......
  • 遇到的问题------------时间格式转化时java.text.ParseException: Unparseable date:
    -时间格式转化时java.text.ParseException:Unparseabledate:""异常把String time=2013-09-22用 privatefinalstaticSimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");simpleDateFormat.parse(time.trim()));转化时报错java.text.......
  • JSP----jQuery插件ContextMenu生成右键菜单
    讲述三个内容:一:简介二:使用示例三:在jsp中动态生成的代码记录一:简介ContextMenu 译自:http://www.trendskitchens.co.nz/jquery/contextmenu/ ContextMenu是一个轻量级jQuery插件,用于选择性地用自己创建的菜单代替浏览器的默认右键菜单。 特点 1.可以在一个页面中使用多个右......
  • HandlerSocket的perl接口操作方法
    实例化:/*   *String $host:MySQLip;  *String $port:handlersocket插件的监听端口,它有两个端口可选:一个用于读、一个用于写   */ $hs=newHandlerSocket($host,$port);运用例子:#9998为读取端口详见上一篇handlersocket的安装my$args={host=>'loca......