当前位置: 首页 > news >正文

C# 生成随机数的方法

C# 提供了一种强大而方便的工具类 Random ,用于生成随机数。这里将分类讨论如何通过 C# 实现随机数生成,以及应用于实际情况中的一些具体方案。

一、Random 类概述

Random 类表示一个伪随机数生成器,用于生成满足随机性统计要求的数字序列。

重载的 Random.Next()

Random.Next() 方法提供了三种重载:

  • Next():生成大于等于 0 且小于 Int32.MaxValue 的 32 位整数。

  • Next(int minValue, int maxValue):生成从 minValue (包括) 到 maxValue (不包括) 的整数。

示例

/// <summary>
/// 生成随机数列表
/// </summary>
/// <returns></returns>
public List<int> RDNumber()
{List<int> col = new List<int>();for (int i = 0; i < 6; i++){Random rd = new Random(); // 初始化一个新的 Random 实例var a = rd.Next();        // 生成一个随机数col.Add(a);}return col;
}

二、生成不重复的随机数

方法一:利用 List 根据重复状态迭代

通过检查随机数是否存在,防止重复:

/// <summary>
/// 指定范围内的不重复随机数(要求随机数个数小于随机数范围否则程序会陷入死循环。可在循环中加入跳出机制)
/// </summary>
/// <param name="Number">随机数个数</param>
/// <param name="minNum">随机数下限</param>
/// <param name="maxNum">随机数上限</param>
/// <returns></returns>
public List<int> GetRandomArray(int Number, int minNum, int maxNum)
{int j;List<int> b = new List<int>();Random r = new Random();for (j = 0; j < Number; j++){int i = r.Next(minNum, maxNum + 1);if (b.Contains(i))  //是否包含这个数{j = j - 1;}else{b.Add(i);}}return b;
}

方法二:使用索引替换

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

int[] index = new int[15];
for (int i = 0; i < 15; i++)index[i] = i;
Random r = new Random();
//用来保存随机生成的不重复的10个数
int[] result = new int[10];
int site = 15;//设置上限
int id;
for (int j = 0; j < 10; j++)
{id = r.Next(1, site - 1);//在随机位置取出一个数,保存到结果数组result[j] = index[id];//最后一个数复制到当前位置index[id] = index[site - 1];//位置的上限减少一site--;
}

三、生成字母数字的随机组合

这里先说一下说一下ASCII:ASCII(American Standard Code for Information Interchange, 美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要 用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码 系统,并等同于国际标准ISO/IEC 646。

ASCII 系统概述

  • 大写字母 A-Z 的 ASCII 值范围为 65-90

  • 小写字母 a-z 的 ASCII 值范围为 97-122

示例代码

/// <summary>
/// 生成单个随机数字
/// </summary>
public int createNum(Random random)
{int num = random.Next(10);return num;
}
/// <summary>
/// 生成单个大写随机字母
/// </summary>
public string createBigAbc(Random random)
{//A-Z的 ASCII值为65-90int num = random.Next(65, 91);string abc = Convert.ToChar(num).ToString();return abc;
}
/// <summary>
/// 生成单个小写随机字母
/// </summary>
public string createSmallAbc(Random random)
{//a-z的 ASCII值为97-122int num = random.Next(97, 123);string abc = Convert.ToChar(num).ToString();return abc;
}

生成随机字母数字组合

/// <summary>
/// 生成随机字母数字组合
/// </summary>
/// <returns></returns>
public string GetRandom()
{Random random = new Random();//创建一个StringBuilder对象存储密码StringBuilder sb = new StringBuilder();//使用for循环把单个字符填充进StringBuilder对象里面变成14位密码字符串for (int i = 0; i < 14; i++){//随机选择里面其中的一种字符生成switch (random.Next(3)){case 0://调用生成生成随机数字的方法sb.Append(createNum(random));break;case 1://调用生成生成随机小写字母的方法sb.Append(createSmallAbc(random));break;case 2://调用生成生成随机大写字母的方法sb.Append(createBigAbc(random));break;}}return sb.ToString();
}

http://www.lryc.cn/news/504888.html

相关文章:

  • ip_done
  • 3D可视化引擎HOOPS Visualize与HOOPS Luminate Bridge的功能与应用
  • Docder 搭建Redis分片集群 散片插槽 数据分片 故障转移 Java连接
  • 校园交友app/校园资源共享小程序/校园圈子集合二手物品交易论坛、交友等综合型生活服务社交论坛
  • Chaos Mesh云原生的混沌测试平台搭建
  • Vue3之组合式API详解
  • 大模型的构建与部署(3)——数据标注
  • AI发展与LabVIEW程序员就业
  • 本地事务 + 消息队列事务方案设计
  • pinctrl子系统学习笔记
  • 使用vue-element 的计数器inputNumber,传第三个参数
  • 如何从0构建一个flask项目,直接上实操!!!
  • Mongoose连接数据库操作实践
  • centos 7.9 freeswitch1.10.9环境搭建
  • Gitlab服务管理和仓库项目权限管理
  • LLMs之Llama-3:Llama-3.3的简介、安装和使用方法、案例应用之详细攻略
  • OpenCV函数及其应用
  • vulnhub靶场【DriftingBlues】之3
  • 文件上传—阿里云OSS对象存储
  • mybatis-plus超详细讲解
  • 【Linux】--- 进程的概念
  • Unity NTPComponent应用, 实现一个无后端高效获取网络时间的组件
  • go语言使用zlib压缩[]byte
  • Windows 配置 Tomcat环境
  • 【python从入门到精通】-- 第六战:列表和元组
  • Python | 数据可视化中常见的4种标注及示例
  • LearnOpenGL学习(高级OpenGL -> 高级GLSL,几何着色器,实例化)
  • Scala学习记录
  • vue使用pdfh5.js插件,显示pdf文件白屏
  • docker login 出错 Error response from daemon