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日

相关文章

  • 浅谈ASP.NETCore统一处理404错误都有哪些方式

    ASP.NET Core统一处理404错误的方式有多种,本文将详细讲解这些方式,包括实现过程、示例说明等。 方式一:使用中间件处理404错误 ASP.NET Core提供了中间件来处理404错误。我们可以在Startup.cs文件中添加以下代码: public void Configure(IApplicationBuilder app, IWebHostE…

    C# 2023年5月16日
    00
  • asp.net(c#)复数类(复数加减乘除四则运算)

    ASP.NET (C#)复数类(复数加减乘除四则运算) 简介 复数是一个由实部和虚部组成的数,实部和虚部都是实数。在科学技术领域中,复数常用于描述具有大小和相位的量,例如电位。 在ASP.NET (C#)中,我们可以定义并使用自己的复数类,实现复数的四则运算,并进行加减乘除等操作。下面将详细介绍如何编写一个复数类。 定义复数类 为了定义一个复数类,我们需要考…

    C# 2023年6月3日
    00
  • 详解如何创建一个.NET Core工程

    如何创建一个.NET Core工程 .NET Core是一个跨平台的开源框架,可以用于构建Web应用程序、命令行工具、桌面应用程序等。本攻略将详细介绍如何创建一个.NET Core工程,并提供两个示例说明。 创建.NET Core工程 我们可以按照以下步骤来创建一个.NET Core工程: 安装.NET Core SDK。 打开命令行工具。 使用dotnet…

    C# 2023年5月17日
    00
  • redis与memcached的区别_动力节点Java学院整理

    Redis与Memcached的区别 1. 数据类型的支持 Redis相较于Memcached,数据类型更加丰富,能够支持更多的数据结构,包括字符串(string)、哈希表(hash)、列表(list)、集合(set)和有序集合(sorted set)等等。 例如: 字符串示例 Redis支持存储和操作二进制字符串,而Memcached只支持存储字符串。 #…

    C# 2023年6月7日
    00
  • Powershell小技巧之查看安装的.Net framework版本信息

    下面是“Powershell小技巧之查看安装的.Net framework版本信息”的完整攻略: 步骤1:打开Powershell 首先,打开Powershell终端。可以通过在开始菜单中键入“powershell”并点击“Windows Powershell”来打开终端。 步骤2:输入命令 在Powershell终端中输入以下命令: Get-ChildIt…

    C# 2023年6月3日
    00
  • WPF利用RPC调用其他进程的方法详解

    WPF利用RPC调用其他进程的方法详解 WPF(Windows Presentation Foundation)是一种用于构建Windows桌面应用程序的技术。在WPF应用程序中,我们可以使用RPC(Remote Procedure Call)调用其他进程的方法。本文将详细讲解如何在WPF应用程序中使用RPC调用其他进程的方法,并提供两个示例。 1. 创建R…

    C# 2023年5月15日
    00
  • 3种C# 加载Word的方法

    当需要在C#程序中操作Word文档时,通常有三种方式可以选择。下面我将详细讲解这三种C#加载Word的方法,包括使用Microsoft Office软件、使用Spire.Doc和使用Open XML SDK,以及每种方法的优缺点等。在过程中,我将提供两条具体示例说明,帮助读者更清晰地理解这些方法的应用场景。 1. 使用Microsoft Office软件 M…

    C# 2023年6月1日
    00
  • asp.net直接Response输出WML页面示例代码

    当我们需要在 ASP.NET 程序中输出 WML 页面时,可以使用 Response.Write 方法直接将 WML 页面代码输出到响应流中。以下是实现该功能的完整攻略: 第一步:设置响应内容类型 在 ASP.NET 程序中,我们需要设置响应内容类型,以便浏览器能够正确解析页面。对于 WML 页面,我们需要设置响应内容类型为 “text/vnd.wap.wm…

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