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

Visual Studio 中随机数的生成(C#)

目录

一、基本介绍

二、种子(Seed)的作用

三、基本模板

四、基本用法:生成随机数

五、代码示例

六、注意事项

七、常见方法对比


、基本介绍

原理:基于种子值(默认以系统时间为种子)生成伪随机序列,相同种子会产生相同序列。

适用场景:游戏随机事件、抽样测试、模拟数据生成等

二、种子(Seed)的作用

默认行为
若未指定种子,Random会使用当前系统时间(毫秒级)作为种子,确保每次运行生成不同序列。

指定种子
若需生成可重复的随机序列(如测试场景),可手动传入种子:

Random randomWithSeed = new Random(123);// 种子为123,每次运行生成相同的随机数序列

三、基本模板

// 1. 实例化Random(建议全局唯一,避免重复创建)

Random random = new Random();

// 2. 生成随机数(调用不同方法)

int num1 = random.Next();// 非负整数(0 ~ int.MaxValue)

int num2 = random.Next(100);// 0 ~ 99(左闭右开区间)

int num3 = random.Next(50, 100);// 50 ~ 99

double num4 = random.NextDouble();// 0.0 ~ 1.0的双精度浮点数

四、基本用法:生成随机数

1.实例化Random对象
Random random = new Random();// 默认以系统时间作为种子(Seed)

2.生成整数
int randomInt = random.Next(10);// 结果:0-9之间的整数

3.生成浮点数
double randomDouble = random.NextDouble();// 结果:0.0 ≤ x < 1.0

五、代码示例

1.生成指定范围的整数

Random rnd = new Random();

int diceRoll = rnd.Next(1, 7);// 生成1~6的整数(模拟骰子)

Console.WriteLine($"骰子点数:{diceRoll}");

2.生成随机浮点数

Random rnd = new Random();

double randomValue = rnd.NextDouble() * 100;// 0.0 ~ 100.0

Console.WriteLine($"随机浮点数:{randomValue:F2}");// 保留两位小数

3.生成不重复的随机数

//生成10个1~100的不重复数

List<int> numbers = newList<int>(); //List可以指定类型进行存储,且存储一种数据类型,取出时不用强制转换,能保证数据类型安全

while (numbers.Count < 10)

{

int num = rnd.Next(1, 101);

if (!numbers.Contains(num))

numbers.Add(num);

}

Console.WriteLine("不重复随机数:" + string.Join(", ", numbers));

六、注意事项

1.避免短时间内重复实例化
若在循环中频繁创建Random对象(如毫秒内多次实例化),系统时间种子可能相同,导致生成重复的随机数。建议全局或类级别的单例实例。

2.种子的可控性

若需复现随机结果,可指定种子:

Random random = new Random(123); // 固定种子123,每次运行生成相同序列

3.加密安全场景

若用于密码等敏感场景,需使用加密级随机数生成器

4.多线程安全

Random类不是线程安全的,多线程环境下需加锁或使用ThreadLocal<Random>

七、常见方法对比

方法描述示例
Next()生成非负整数(0 ~ int.MaxValue)random.Next()→ 123456
Next(int maxValue)生成0 ~ maxValue-1的整数random.Next(10)→ 3
Next(int min, int max)生成min ~ max-1的整数random.Next(5, 10)→ 7
NextDouble()生成0.0 ~ 1.0的双精度浮点数random.NextDouble()→ 0.456
NextBytes(byte[] buffer)填充随机字节到数组random.NextBytes(buffer)
http://www.cnnetsun.cn/news/35613.html

相关文章:

  • 被遗忘的支点:十字槽平台,工业制造的隐形基石
  • phpredis扩展的压缩技术深度解析:从性能瓶颈到优化实践
  • 10分钟搞定FossFLOW部署:Docker多架构支持与数据持久化终极指南
  • Windows PowerShell 2.0 完整安装与使用指南
  • Unity高效3D模型导入导出终极指南:glTFast全面解析
  • 5个理由让你爱上DesktopSharing:实时桌面共享的终极解决方案
  • 9、企业 Linux 系统中 X 窗口系统与打印机的配置管理
  • 13、企业级 Linux 系统安全防护全攻略
  • 17、企业 Linux 电子邮件服务配置与管理全解析
  • Fastplotlib终极指南:高性能数据可视化的完整解决方案
  • Qwen3-4B-FP8:40%硬件成本实现70%性能,轻量级大模型改写行业规则
  • 如何快速掌握SpinningMomo:窗口调整工具的完整使用指南
  • SAP 深度解析:国际贸易术语 (Incoterms) 的业务含义说明
  • ComfyUI-SeedVR2:终极AI视频放大工具,一键提升画质到4K
  • 如何在 ABAP Development Tool 里使用 WRITE 直接将内容打印到原生的 console 中去
  • 3大核心技巧:零基础构建高质量老照片修复训练数据集
  • 基于微信小程序的校园校友交流平台毕设源码
  • 846534
  • 如何快速掌握Subnautica Nitrox:多人联机模组终极指南
  • 2、SUSE Linux Enterprise Server 10 安全指南:从基础到实践
  • 3、SUSE Linux Enterprise Server 10 安全策略与术语解析
  • Qwen3-VL-8B-Thinking-FP8:80亿参数重构多模态AI应用边界
  • SeaORM数据迁移实战指南:如何高效处理百万级数据
  • 股票大笔买卖资金流量图
  • 5分钟搞定Expo推送通知:新手必看的完整配置手册
  • 探索工业机器人未来十年趋势
  • Leetcode 剑指 Offer II 154. 复杂链表的复制
  • 为什么这家医院的AI系统能像专家会诊一样精准诊断?
  • 通配*|滚动hash
  • FBCTF平台管理终极指南:从零搭建到高效运营的完整攻略