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();
}
相关推荐
крон2 小时前
【Auto.js例程】华为备忘录导出到其他手机
开发语言·javascript·智能手机
zh_xuan3 小时前
c++ 单例模式
开发语言·c++·单例模式
老胖闲聊3 小时前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1184 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之4 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
豆沙沙包?4 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
军训猫猫头5 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
liuyang-neu5 小时前
java内存模型JMM
java·开发语言
不爱写代码的玉子6 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
我很好我还能学7 小时前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++