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-90
    int num = random.Next(65, 91);
    string abc = Convert.ToChar(num).ToString();
    return abc;
}
/// <summary>
/// 生成单个小写随机字母
/// </summary>
public string createSmallAbc(Random random)
{
    //a-z的 ASCII值为97-122
    int 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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937872.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

wazuh-modules-sca-scan

sca模块主函数wm_sca_main -> wm_sca_start 检查policy文件中的每一个项目wm_sca_check_policy static int wm_sca_check_policy(const cJSON * const policy, const cJSON * const checks, OSHash *global_check_list) {if(!policy) {return 1;}const cJSON * const id c…

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…

Arm Cortex-M处理器对比表

Arm Cortex-M处理器对比表 当前MCU处理器上主要流行RISC-V和ARM处理器&#xff0c;其他的内核相对比较少&#xff1b;在这两种内核中&#xff0c;又以Arm Cortex-M生态环境相对健全&#xff0c;大部分的厂家都在使用ARM的处理器。本文主要介绍Arm Cortex-M各个不同系列的参数对…

如何实现规范化LabVIEW编程

规范编写LabVIEW程序的目的是提高代码的可读性、可维护性、可扩展性&#xff0c;并确保团队成员能够高效地理解和修改代码。以下是一些关键建议&#xff0c;帮助您编写更专业的LabVIEW代码&#xff0c;并确保它易于后续的升级和维护&#xff1a; ​ 1. 合理的项目结构 目录结构…

深入C语言文件操作:从库函数到系统调用

引言 文件操作是编程中不可或缺的一部分&#xff0c;尤其在C语言中&#xff0c;文件操作不仅是处理数据的基本手段&#xff0c;也是连接程序与外部世界的重要桥梁。C语言提供了丰富的库函数来处理文件&#xff0c;如 fopen、fclose、fread、fwrite 等。然而&#xff0c;这些库…

游戏引擎学习第52天

仓库 : https://gitee.com/mrxiao_com/2d_game 这节的内容相当多 回顾 在游戏中&#xff0c;实体被分为不同的类别&#xff1a;接近玩家的“高频实体”、距离较远并正在模拟的“低频实体”和不进行更新的“休眠实体”。这些实体会根据它们与玩家的距离进行处理&#xff0c;接…

docker 安装mysql 5.7 详细保姆级教程

1. 安装mysql(5.7) docker pull mysql:5.7 若是拉取不了&#xff0c;可以配置下 docker 源 2. 查看是否安装成功 docker images 下图就是成功了 3.创建mysql专用目录、数据挂载目录、配置文件目录 &#xff0c;演示目录在于/home/下 //命令逐条执行cd /home/ mkdir mysql …

宝塔SSL证书申请失败,报错:申请SSL证书错误 module ‘OpenSSL.crypto‘ has no attribute ‘sign‘(已解决)

刚安装宝塔申请SSL就报错&#xff1a;申请SSL证书错误 module OpenSSL.crypto has no attribute sign 面板、插件版本&#xff1a;9.2.0 系统版本&#xff1a;Alibaba Cloud Linux 3.2104 LTS 问题&#xff1a;申请SSL证书错误 module OpenSSL.crypto has no attribute sign…

Three使用WebGPU的关键TSL

Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…

【蓝桥杯国赛真题15】python质因数个数 蓝桥杯青少年组python编程国赛真题详细解析

目录 python质因数个数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python质因数个数 第十二届蓝桥杯青少年组python比赛国赛真题详细解析 …

发布/部署WebApi服务器(IIS+.NET8+ASP.NETCore)

CS软件授权注册系统-发布/部署WebApi服务器(IIS.NET8ASP.NETCore) 目录 本文摘要VS2022配置发布VS2022发布WebApiIIS服务器部署WebApi 将程序文件复制到云服务器添加网站配置应用程序池配置dns域名配置端口阿里云ECS服务器配置19980端口配置https协议 (申请ssl证书)测试WebAp…

MybatisPlus-配置加密

配置加密 目前配置文件中的很多参数都是明文&#xff0c;如果开发人员发生流动&#xff0c;很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先&#xff0c;我们利用AES工具生成一个随机秘钥&#…

九个任务调度框架

一、背景介绍 说到定时任务&#xff0c;相信大家都不陌生&#xff0c;在我们实际的工作中&#xff0c;用到定时任务的场景可以说非常的多&#xff0c;例如&#xff1a; 双 11 的 0 点&#xff0c;定时开启秒杀每月1号&#xff0c;财务系统自动拉取每个人的绩效工资&#xff0…

photoshop的2个形状-箭头

有时候用ps画一些教程类图文&#xff0c;需要用到箭头. 另外自己画了一个镂空的长方形和正方形 形状的路径一般在Custom Shapes文件夹内 例如 E:\photoshopCS4\Adobe Photoshop CS4\Presets\Custom Shapes

R-Studio Technician,无网络负担地进行远程数据分析和数据恢复任务

对于数据恢复技术人员和技术支持团队来说&#xff0c;时间就是金钱。这不仅包括您在客户机器上花费的时间 - 还包括您往返公司办公室的时间&#xff0c;这可能会带来巨大的不便&#xff0c;特别是如果客户位于其他省市。电话支持通常不适用于需要数小时才能完成的复杂任务&…

将PDF流使用 canvas 绘制展示在页面上(一)

将PDF流展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上进行绘制展示 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 Base64。 将 pdf 流传入该组件中使用 /** fo…

【Java 学习】详细讲解---包和导包、Scanner类、输入源

1. 包 1.1 什么是包&#xff1f; 举个例子&#xff0c;你和你的同学有不同的家庭&#xff0c;你们都有自己的爸爸妈妈&#xff0c;都有自己的家。在自己的家中你们可以按照自己爱好摆放东西&#xff0c;都互不干扰。但是&#xff0c;假如你们的家都在一起&#xff0c;你们就不…

在线预约陪诊小程序

一、前言 随着社会老龄化加剧以及人们健康意识的提高&#xff0c;就医过程中的陪伴需求日益增长。许多患者在面对复杂的医院环境、繁琐的就医流程时&#xff0c;需要有人协助挂号、候诊、取药等&#xff0c;而家属可能因工作繁忙无法全程陪同。同时&#xff0c;异地就医的患者更…

贪心算法【1】

文章目录 860. 柠檬水找零题目解析算法原理代码实现交换论证法 2208. 将数组和减半的最少操作次数题目解析算法原理代码实现交换论证法 179. 最大数题目解析算法原理代码实现 860. 柠檬水找零 题目链接&#xff1a;860. 柠檬水找零 题目解析 一杯柠檬水5块钱&#xff0c;每个…

【一文概述】常见的几种内外网数据交换方案介绍

一、内外网数据交换的核心需求 内外网数据交换的需求核心在于“安全、效率、合规”&#xff0c;而应用场景的多样性使得不同企业需要定制化的解决方案。通过结合业务特性和安全等级要求&#xff0c;企业能够选择适合的技术方案来实现高效、安全的内外网数据交换。 1、数据安全…