有效解决C# Random生成随机数重复的问题

2023-11-15

在Random生成随机数的时候,如果短时间内连续生成随机数,就会导致生成的随机数相同。下面我们介绍如何解决在 短时间内生成随机数的时候,如何避免随机数不一样的问题。
(实例下载链接:http://download.csdn.net/download/shuai_wy/10128989

补充:即使我们生成随机数的区间不一样,但是仍然面临这个问题,区间里的点是一样的。

举个栗子:

假设我们要生成 [33,35], [8,10], 我们用这两个区间短时间内生成随机数,就会发现:

第一个区间生成的是 33 的时候,第二个区间生成的是 8; 第一个区间生成的是 34的时候,第二个区间生成的是 9;

一、 有效方案:

1. 提高随机数不重复概率的种子生成方法(推荐)

//获取随机种子
static int GetRandomSeed( )
{
    byte[] bytes = new byte[4];
    System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider( );
    rng.GetBytes( bytes );
    return BitConverter.ToInt32( bytes , 0 );
}

Random random = new Random( GetRandomSeed( ) );

2. 延时

Thread.Sleep(100);
Random ran = new Random();
ran.Next();

二、其他生成随机数的方法实例


    /// <summary>
    /// 根据中位数返回区间随机数
    /// </summary>
    /// <param name="mid"></param>
    /// <returns></returns>
    private static int GetRandom(int mid)
    {
        //1.
        //Random ran = new Random();

        //2.
        //Random ran = new Random(new Guid().GetHashCode());

        //3.
        //long tick = DateTime.Now.Ticks;
        //Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));

        //4.(*有效方法)
        //Thread.Sleep(100);
        //Random ran = new Random();

        //5.(*有效方法)
        Random ran = new Random(GetRandomSeed());

        return ran.Next(mid -5,mid +10);
    }

    static int GetRandomSeed()
    {
        byte[] bytes = new byte[4];
        System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
        rng.GetBytes(bytes);
        return BitConverter.ToInt32(bytes, 0);
    }


//控制台打印,测试一下
 static void Main(string[] args)
 {

      int count = 0;
     Random ran = new Random();
     int mid = 33;
     while (count < 50)
     {
         Console.WriteLine(GetRandom(mid));
         count++;
     }
     Console.ReadKey();
 }

生成随机数运行截图:

Random生成随机数

参考博文及实例

c# Random太快产生的随机数会重复: https://www.cnblogs.com/TouchAfflatus/p/3784225.html

实例下载: http://download.csdn.net/download/shuai_wy/10128989

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效解决C# Random生成随机数重复的问题 的相关文章

  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 提取单花括号内的值

    我想要一个收藏 value 一个字符串使用正则表达式 例如 lorem ipsum field1 lorem ipsum field2 lorem ipsum field1 lorem ipsum field2 field3 我会得到 fi
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 析构函数与成员函数竞赛

    当我在析构函数内时 其他线程是否可能开始执行对象的成员函数 遇到这种情况该如何处理呢 C 没有内在的保护来防止在删除对象后使用它 忘记竞争条件 另一个线程可以在完全删除你的对象后使用你的对象 Either 确保只有一个位置 代码拥有该对象
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • 为什么 ObservableCollection 有两个集合构造函数?

    The 可观察集合 T https msdn microsoft com en us library ms668604类有两个构造函数 可以在其中传递项目集合 一个构造函数接受一个IEnumerable T 另一个List T 鉴于List
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • 编译器消息“警告:格式‘%s’需要类型‘char *’,但参数 2 具有类型‘char (*)’”

    我正在尝试运行一个简单的 C 程序 但收到此错误 警告 格式 s 需要类型 char 但参数 2 的类型为 char 20 我在跑步Mac OS X v10 8 https en wikipedia org wiki OS X Mounta
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • Rx 在不同的线程上生产和消费

    我试图通过此处的示例代码来简化我的问题 我有一个生产者线程不断地输入数据 并且我尝试在批次之间添加时间延迟来对其进行批处理 以便 UI 有时间渲染它 但结果并不如预期 生产者和消费者似乎在同一个线程上 我不希望批处理缓冲区在正在生成的线程上
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 为什么我无法通过 lambda 捕获“this”指针?

    考虑以下代码 class A public void foo auto functor this A a this auto functor a The compiler won t accept this instead of a a g
  • 使用 DataGridViewCheckboxCell 真正禁用 DataGridView 中的复选框

    有谁知道如何使用 DataGridViewCheckboxCell 禁用 DataGridView 中的复选框 我可以将其设置为只读 并设置背景颜色 但我无法让复选框本身显示为禁用状态 有什么想法吗 Guess 你必须自己画 http so
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 模型解释性:Lime包的使用

    1 模型可解释性 基于复杂数据挖掘方法构建的预测模型 通常存在 黑箱问题 导致其可解释性与可利用性降低 目前 机器学习模型可解释性总体上可分为2类 事前可解释性 指通过训练结构简单 可解释性好的模型或将可解释性结合到具体的模型结构中的自解释
  • boost::ptime的常用方法

    boost ptime的常用方法 主要介绍常用获取时间的方法 以及相互之间的转换 需要使用boost库 用到的头文件 boost timer timer hpp 和 boost date time hpp 获取本地时间 boost posi
  • Android:BaseAdapter的优化方案一览

    1 什么是数据适配器 用来建立数据源和数据渲染控件之间的关系 将数据的来源和数据的显示之间进行解耦 降低耦合性 2 BaseAdapter接口 BaseAdapter是一个抽象类 abstract 以下代码为android源码 public
  • Deep Java Library(四)使用DJL Serving部署JAVA模型 For Windows

    1 下载Windows版DJL Serving Windows版DJL Serving下载地址 https publish djl ai djl serving serving 0 23 0 zip 下载下来是一个zip压缩包 大约50M左
  • 一个好玩的编程小游戏—— 母牛生小牛

    题目 母牛从3 7岁初每年会生产1头小母牛 10岁后死亡 10岁任然存活 假设初始有一头刚出生的母牛 请问第n年有多少头母牛 年从第一年开始计数 注 第三年初会出生 第一头母牛 故第三年有两头母牛 第五年初 第三年出生的母牛会生产 故第五年
  • C语言之argument和parameter的区别

    The C Programming Language K R Page25 We will generally use parameter for a variable named in the parenthesized list in
  • STM32F4——ADC学习笔记

    OVR溢出错误 最近调试一个板子 使用ADC1采集多个通道 然后DMA传输到对应数组里 模仿STM32F1的写法后 一直出现OVR错误 溢出 网上看了各位大神的分析 里面有个比较关键的说DMA溢出 需要判断溢出的时候 重新配置DMA和再次启
  • ST-GCN论文分析

    Introduction 传统的骨架建模方法通常依赖手工制作的零件或遍历规则 因此表达能力有限 难以推广 新的动态骨架模型 通过自动从数据中学习时空模式 超越了以往方法的局限性 该公式不仅有更强的表达能力 而且有更强的泛化能力 早期使用骨架
  • IDEA Java1.8通过sqljdbc4连接sqlserver插入语句

    1 下载sqljdbc4 https mvnrepository com artifact com microsoft sqlserver jdbc sqljdbc4 4 0 下载后在IDEA放入仓库内 可以放在resources下 右键
  • 【Java基础】day14

    day14 一 什么是 RESTful 架构 REST 全称是 Representational State Transfer 中文意思是表征性状态转移 它首次出现在 2000 年 Roy Fielding 的博士论文中 Roy Field
  • 数据结构:时间复杂度汇总

    顺序表 插入操作 平均移动n 2个元素 则时间复杂度为O n 表尾插入 时间复杂度为O 1 删除操作 顺序表中删除任意一个元素 平均需要有 n 1 2个元素移动 时间复杂度为O n 查找操作 平均比较次数 n 1 2 时间复杂度为O n 数
  • Beyond Compare4到期

    到期后 删除注册表下的 计算机 HKEY CURRENT USER SOFTWARE Scooter Software Beyond Compare 4下的CacheID文件 试用期重新计算 打开注册表 win r 输入regedit
  • rollback-only异常令我对事务有了新的认识

    背景 环境 相关环境配置 SpringBoot PostGreSQL Spring Data JPA 问题 两个使用 Transaction 注解的 ServiceA 和 ServiceB 在 A 中引入了 B 的方法用于更新数据 当 A
  • 虚拟机配置NAT网络

    如果你的网络ip资源紧缺 但是你又希望你的虚拟机能够联网 这时候NAT模式是最好的选择 NAT模式借助虚拟NAT设备和虚拟DHCP服务器 使得虚拟机可以联网 其网络结构如下图所示 这个地方一定要将 主机网卡和虚拟网卡VMnet8地址设置成不
  • Linux中下载Redis

    1 在Redis版本库 https download redis io releases 可根据自己的需求选择下载对应的版本 然后直接下载 2 上传到linux里面 3 解压安装包 4 进入文件 打开文件 查看文件 5 进行编译 6 安装完
  • Springboot2.7.5版本升级2.7.8Redis启动报错

    项目从Springboot2 7 5升级到Springboot2 7 8的时候 启动时redis报错 报错如下 org springframework beans factory UnsatisfiedDependencyException
  • 网络拓扑配置案例练习(VRRP,浮动路由,DHCP,三层交换机配置)

    网络拓扑配置案例 网络拓扑配置案例练习 网络拓扑 需求描述 具体操作命令 交换机创建vlan 配置access trunk口 划分vlan vrrp配置 路由配置 验证vrrp和浮动路由 DHCP配置 总结 网络拓扑配置案例练习 在这篇文章
  • 线性空间和线性变化

    目录 考点一 线性空间的基与维数 1 线性空间 2 基底 3 子空间 线性子空间 编辑4 生成子空间 1 v1 n v2 2 v1 v2 5 求和子空间的方法 6 维数定理 7 例题 1 例1 1 考点二 证明线性变换 1 变换 2 线性变
  • SpringBoot 配置404页面

    SpringBoot 配置404页面 项目环境 服务器 centos 前端 Vue 后端 SpringBoot 出现的问题 访问一个不存在的页面时 会出现tomcat自带的404界面 这个界面对于用户不太友好 解决方案 1 自己写好404页
  • 有效解决C# Random生成随机数重复的问题

    在Random生成随机数的时候 如果短时间内连续生成随机数 就会导致生成的随机数相同 下面我们介绍如何解决在 短时间内生成随机数的时候 如何避免随机数不一样的问题 实例下载链接 http download csdn net download