C#生成指定范围内的不重复随机数

下面是" C#生成指定范围内的不重复随机数 "的攻略。

1. 使用 C# 的 Random 类生成随机数

System.Random 是 C# 中封装了随机数生成器的类,可以用来生成伪随机数。Random 的默认构造函数可以产生种子数,可以在每次生成随机数时用来确定这个随机数系列的起始位置,从而产生不同的随机数序列。

2. 生成指定范围内的随机数

生成指定范围内的随机数可以使用 Random.Next() 方法,该方法可生成大于等于 0 且小于 maxValue 参数的随机数。例如,如果要生成 0-99 范围内的数字,可以这样实现:

Random ran = new Random();
int randomNumber = ran.Next(100);

其中,Random.Next() 方法参数为一个 int 类型,表示所取随机数的最大值(不包含最大值)。这样就可以方便地生成指定范围内的随机数。

3. 生成不重复的随机数

为了生成不重复的随机数,我们可以采用如下两种做法。

3.1 方案一:生成所有随机数后去重

可以先用 Random.Next() 方法生成有序随机数序列,然后在去重后得到不重复的随机数序列。需要注意的一点是,如果要生成的不重复随机数数量超过了范围,则需要抛出异常。

List<int> randomNums = new List<int>();
int maxNum = 100;
int numCount = 50;

if (maxNum < numCount)
{
    throw new ArgumentOutOfRangeException("numCount", "生成的不重复随机数数量不能大于范围内数字的数量");
}

Random random = new Random();
while (randomNums.Count != numCount)
{
    int randomNumber = random.Next(maxNum);
    if (!randomNums.Contains(randomNumber))
    {
        randomNums.Add(randomNumber);
    }
}

3.2 方案二:生成随机数时逐个判断

而如果我们先生成有序序列再去重,需要额外的空间存储一份整个序列,它才能进行去重处理,而这种处理方式会占用大量的空间。更好的方式是逐步生成随机数,然后判断其是否已经存在于之前生成的随机数中。如果已经存在,则继续生成随机数,直到得到指定数量的随机数为止。

List<int> randomNums = new List<int>();
int maxNum = 100;
int numCount = 50;

if (maxNum < numCount)
{
    throw new ArgumentOutOfRangeException("numCount", "生成的不重复随机数数量不能大于范围内数字的数量");
}

Random random = new Random();
while (randomNums.Count != numCount)
{
    int randomNumber = random.Next(maxNum);
    if (randomNums.IndexOf(randomNumber) == -1)
    {
        randomNums.Add(randomNumber);
    }
}

4. 示例说明

4.1 示例 1:生成指定范围内的不重复随机数

现在,我们需要生成不重复的50个1-100的随机数,代码如下:

List<int> randomNums = new List<int>();
int maxNum = 100;
int numCount = 50;

if (maxNum < numCount)
{
    throw new ArgumentOutOfRangeException("numCount", "生成的不重复随机数数量不能大于范围内数字的数量");
}

Random random = new Random();
while (randomNums.Count != numCount)
{
    int randomNumber = random.Next(maxNum);
    if (randomNums.IndexOf(randomNumber) == -1)
    {
        randomNums.Add(randomNumber);
    }
}

foreach (int num in randomNums)
{
    Console.WriteLine(num);
}

4.2 示例 2:生成指定范围内的随机数

如果我们不需要生成不重复的随机数,则可以使用以下代码:

Random ran = new Random();
int n = ran.Next(10, 20);
Console.WriteLine(n);

以上代码将生成10到19之间的随机整数,包含10但不包含20。

这就是" C#生成指定范围内的不重复随机数 "的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#生成指定范围内的不重复随机数 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • WCF实现进程间管道通信Demo分享

    下面是关于“WCF实现进程间管道通信Demo分享”的完整攻略,包含两个示例。 1. 什么是进程间管道通信 进程间管道通信是一种在不同进程之间进行通信的方法。在Windows操作系统中,可以使用命名管道(Named Pipe)来实现进程间管道通信。命名管道是一种命名的、双向的、异步的、字节流管道,可以在本地或远程计算机之间进行通信。 2. WCF实现进程间管道…

    C# 2023年5月15日
    00
  • PostgreSQL教程(二十):PL/pgSQL过程语言

    PL/pgSQL是PostgreSQL所支持的一种过程语言,它具有丰富的特性,可供开发者在数据库端编写存储过程和触发器等逻辑。以下是PL/pgSQL过程语言的完整攻略: 1. PL/pgSQL的基本语法结构 PL/pgSQL的语句格式如下: DECLARE — 声明变量 BEGIN — … — statements EXCEPTION — ……

    C# 2023年5月15日
    00
  • 解析.netcore项目中IStartupFilter使用教程

    IStartupFilter是.NET Core中的一个接口,用于在应用程序启动时执行一些额外的操作。在本攻略中,我们将详细讲解如何解析.NET Core项目中的IStartupFilter使用教程。 创建StartupFilter类:首先,我们需要创建一个名为StartupFilter的类,并实现IStartupFilter接口。我们可以在.NET Cor…

    C# 2023年5月16日
    00
  • 关于c#中单例模式的一些问题

    下面给您详细讲解关于C#中单例模式的一些问题。 什么是单例模式? 单例模式是一种常见的设计模式,其定义为:确保一个类只有一个实例,并提供一个全局访问点。这意味着在整个应用程序中,只会有一个该类的实例存在,而且该实例可以被任何部分访问并进行更改。 为什么要使用单例模式? 单例模式主要用于节省系统资源,因为在某些情况下,多个实例的存在会带来很大的性能影响,而只有…

    C# 2023年6月7日
    00
  • C#面向对象设计原则之里氏替换原则

    C#面向对象设计原则之里氏替换原则 什么是里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计中的一个基本原则。它重新定义了关于继承的条款。原始的定义是由“Barbara Liskov”于1987年提出的:“如果对于每一个类型为 T1 的对象 o1 都有类型为 T2 的对象 o2,使得以 T1 定义的…

    C# 2023年5月14日
    00
  • C#操作SQLite数据库之读写数据库的方法

    C#操作SQLite数据库之读写数据库的方法 SQLite简介 SQLite是一款轻型、自包含且无需服务器的SQL数据库引擎,支持大部分的SQL标准,其数据存储在单个磁盘文件中,并使用标准的SQL查询语句进行访问。因此,SQLite具有许多优点,如具有跨平台跨语言访问、开源、简单易用、占用空间小、速度快等等。因此,SQLite是很多开发人员的首选数据库。 C…

    C# 2023年6月1日
    00
  • C# 中AutoMapper的使用方法

    下面是“C# 中AutoMapper的使用方法”的完整攻略: 1. AutoMapper 简介 AutoMapper 是一个 .NET 框架下的对象映射工具,它的主要任务是通过配置文件自动地映射实体之间的属性,省去繁琐的手工编写属性映射代码。使用 AutoMapper 可以极大地提高代码的复用性以及开发效率。 2. 安装 AutoMapper 使用 NuGe…

    C# 2023年6月3日
    00
  • c#使用热键实现程序窗口隐藏示例

    让我来详细讲解一下C#使用热键实现程序窗口隐藏的攻略。 步骤一:注册系统热键 在C#中使用热键需要注册全局热键,这可以通过调用Windows API函数实现。以下是一些示例代码,用于注册和注销全局热键: using System.Runtime.InteropServices; public class GlobalHotkey { [DllImport(&…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部