.NET生成不重复的随机数



在.NET框架中,生成不重复的随机数是一个常见的需求,特别是在模拟、测试或者游戏开发等场景。本篇文章将深入探讨如何使用.NET实现这一功能,并提供一个VB.NET的示例代码。 我们要明白生成随机数的基本原理。在.NET中,我们通常使用`System.Random`类来生成随机数。这个类提供了`Next()`方法,可以生成指定范围内的整数。但是,`Random`类生成的数是基于时间戳的,如果在短时间内创建多个`Random`实例,可能会得到相同的序列,因为它们的基础种子相同。 为了生成不重复的随机数,我们需要维护一个已生成的随机数集合,确保每次生成的新数不在这个集合内。以下是一个简单的VB.NET实现: ```vbnet Imports System.Collections.Generic Public Class UniqueRandomNumberGenerator Private UsedNumbers As New HashSet(Of Integer) Private rand As New Random() Public Sub New(start As Integer, end As Integer) If start > end Then Throw New ArgumentException("Start value must be less than End value.") End If For i As Integer = start To end - 1 UsedNumbers.Add(i) Next End Sub Public Function Generate() As Integer If UsedNumbers.Count = 0 Then Throw New InvalidOperationException("No more unique numbers available.") End If Dim randomIndex As Integer = rand.Next(UsedNumbers.Count) Dim randomNumber As Integer = UsedNumbers.ElementAt(randomIndex) UsedNumbers.Remove(randomNumber) Return randomNumber End Function End Class ``` 在这个类中,我们创建了一个`HashSet`来存储已使用的数字,以及一个`Random`实例来生成新的随机数。构造函数接受起始和结束值,将这个范围内的所有数添加到集合中。`Generate()`方法会从集合中随机选择一个数并返回,同时从集合中移除,确保下一次调用不会重复。 使用这个类时,你可以创建一个实例并多次调用`Generate()`方法,直到所有不重复的随机数都被使用完。例如: ```vbnet Dim generator As New UniqueRandomNumberGenerator(1, 10) For i As Integer = 1 To 10 Console.WriteLine(generator.Generate()) Next ``` 这段代码会打印出1到10之间的不重复随机数。 值得注意的是,这种方法虽然简单,但当需要生成的随机数数量非常大时(如百万级别),性能可能会成为问题,因为频繁地在集合中添加和删除元素会有一定的开销。在这种情况下,可以考虑使用更高效的算法或数据结构,比如使用`BitArray`来存储已使用的位,或者使用鱼洗排序等算法来生成无重复随机数。 生成不重复的随机数在.NET中可以通过维护一个已使用集合并配合`Random`类来实现。这个过程需要注意种子的选择和集合操作的效率,以便在各种场景下都能得到满意的结果。










































































- 1

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- photoshop平面设计方案与应用教案.doc
- 大数据对国际贸易产生的积极影响及消极影响.docx
- 【精选】ppt模板信息化高科技人工智能工业机器人PPT模板.pptx
- 基于python的表情符号词典源码.zip
- 【设计】C和Access的图书管理系统设计与实现.doc
- 在CAD图中插入设计方案者手写签名的方法.doc
- JSP网上购物及发货管理与实现.doc
- 功率谱估计性能分析研究及Matlab仿真.docx
- 输入图片路径即可一键训练 YOLOv8 目标检测或实例分割模型并导出 ONNX
- 单片机汽车多功能报警器设计方案任务书.doc
- plc经验设计方案基本方法.doc
- 互联网时代的小学数学探究式教学.docx
- 计算机思维与大学计算机基础教育探究.docx
- 2011全国计算机等级历年考试一级试题(25套).doc
- 基于神经网络的复杂多属性决策.docx
- 互联网+教育背景下空中课堂的制约因素及教学策略.docx



- 1
- 2
前往页