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日

相关文章

  • C#微信公众号开发之自定义菜单

    C#微信公众号开发之自定义菜单 简介 微信公众号是微信平台提供给开发者的一款应用型产品,它提供给企业或个人一个与互联网用户交互的应用平台。 微信公众号开发的菜单,提供给用户一个便捷来访问公众号的方式,菜单可以是文字、图文等形式。在这篇文章中,我们将介绍如何使用C#实现微信公众号的自定义菜单。 实现步骤 1. 注册成为微信开发者 在微信公众号开发之前,我们需要…

    C# 2023年6月1日
    00
  • .NET 6 整合 Autofac 依赖注入容器

    前言 一行业务代码还没写,框架代码一大堆,不利于学习。常看到java的学习资料或博客,标题一般为《SpringBoot 整合 XXX》,所以仿照着写了《.NET 6 整合 Autofac 依赖注入容器》这样一个标题。以下是我自己的用法,可能不是最佳实践。 一. 引用包 NuGet搜索并安装:AutofacAutofac.Extensions.Dependen…

    C# 2023年5月3日
    00
  • .NET垃圾回收器(GC)原理浅析

    . 标题 为了让读者更好地理解.NET垃圾回收器(GC)的原理,本文将从以下几个方面进行分析: 1. 垃圾回收的概念 首先,我们需要了解垃圾回收的概念。在.NET中,所有的对象都是分配在托管堆(Managed Heap)中的,而堆的管理和维护是由GC负责的。GC会定期检查堆中的对象,识别出哪些对象是不再被使用的,然后将其回收,释放所占用的空间。 2. 垃圾回…

    C# 2023年5月15日
    00
  • C#打包应用程序,与.NETFramework介绍

    正如您所要求的,下面将详细讲解“C#打包应用程序,与.NET Framework介绍”的完整攻略。 什么是.NET Framework? .NET Framework是一个由Microsoft Corporation开发的软件框架,适用于Microsoft Windows操作系统。它提供了一组已经编译好的类库和运行时环境,用于简化C#以及其他.NET编程语言…

    C# 2023年6月1日
    00
  • WPF实现可视化扫码器的示例代码

    下面是针对“WPF实现可视化扫码器的示例代码”的完整攻略。 确定需求 首先需要明确我们要实现的功能,即实现一个可视化的扫码器。具体地说,我们需要以下功能: 打开摄像头并开始录像 在程序界面中实时显示视频流,并同时进行二维码的扫描 扫描到二维码后,弹出提示并将二维码信息显示在界面上 支持暂停和继续录像的操作 确定技术选型 由于我们需要实时显示视频,并对视频流进…

    C# 2023年6月6日
    00
  • C#可选参数的相关使用

    C#可选参数的相关使用攻略 什么是可选参数? C#中的可选参数(Optional Parameters)是指方法调用时,可以省略实参,而将其使用默认值进行替换的一种特殊参数。可选参数在方法声明时使用参数默认值来定义。这种设计让我们的方法更加灵活,使得我们不用在每次调用函数时都得指定所有的函数参数。 如何使用可选参数? C#在定义方法时,使用default关键…

    C# 2023年6月3日
    00
  • C#调用动态库

    C#调用动态库是一种常见的操作,可以让我们在开发的过程中更加灵活。下面是一个详细的攻略,包含了基本概念、实际应用、代码示例等。 基本概念 在讲解C#调用动态库之前,有几个基本概念需要先了解一下: 动态链接库:一种特殊的库,不像静态链接库那样包含在可执行文件中,而是在程序运行时才会加载,也称为共享库。 调用规范:在C函数传递参数的过程中,有多种规范,包括std…

    C# 2023年5月14日
    00
  • asp.net(c#) 使用Rex正则来生成字符串数组的代码

    ASP.NET是一个基于微软.NET框架的Web应用程序框架,支持多种编程语言,如C#、VB等。使用ASP.NET开发Web应用程序可以让开发者更加高效、便捷地创建功能强大的Web应用程序。 Rex正则是.NET框架提供的正则表达式库,可以帮助开发者更加方便地处理和匹配字符串。本文将针对ASP.NET中使用Rex正则来生成字符串数组的问题进行详细讲解。 步骤…

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