C# Random 随机数

本文详细介绍了C#中的Random类,包括其继承关系、类成员及如何生成随机数。提供了生成可重复和不重复随机数的示例代码,对比了不同方法的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载至:点击这里

1 继承关系

Object→Random
表示伪随机数生成器,这是一种能够产生满足某些随机性统计需求的数字序列的设备。

2 Random类简介

        Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。

3 Random成员

序号成员名描述
1Equals确定指定的 Object 是否等于当前的 Object。(继承自 Object。)
2Finalize允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。(继承自 Object。)
3GetHashCode用作特定类型的哈希函数。(继承自 Object。)
4GetType获取当前实例的 Type。(继承自 Object。)
5MemberwiseClone创建当前 Object 的浅表副本。(继承自 Object。)
6Next已重载。 返回随机数。
7NextBytes用随机数填充指定字节数组的元素。
8NextDouble返回一个介于 0.0 和 1.0 之间的随机数。
9Sample返回一个介于 0.0 和 1.0 之间的随机数。
9ToString返回表示当前 Object 的 String。(继承自 Object。)

4 Random生成随机数示实例

  4.1生成可重复的随机数

    生成小于100的非随机数

static void Main(string[] args)
{
	Random rand = new Random();
	for (int i = 0; i < 100; i++)
	{
     	Console.WriteLine(rand.Next(100));
	}
}

在这里插入图片描述

    生成某区间的随机数

static void Main(string[] args)
{
	Random rand = new Random();
	for (int i = 0; i < 100; i++)
	{
     	Console.WriteLine(rand.Next(5,10));
	}
}

在这里插入图片描述
    生成0.0-1.0间的随机数

static void Main(string[] args)
{
	Random rand = new Random();
	for (int i = 0; i < 100; i++)
	{
     	Console.WriteLine(rand.NextDouble());
	}
}

在这里插入图片描述

  4.2生成不重复的随机数

 下面使用两种方法生成不重复随机数,并计算耗时。
 ①使用Hashtable(using System.Collections;)

//生成不重复的
static void Main(string[] args)
 {
   //设置计时起始时间
	DateTime beforDT = System.DateTime.Now;
    Hashtable hashtable = new Hashtable();
    Random rm = new Random();
    int RmNum = 10000;
    for (int i = 0; hashtable.Count < RmNum; i++)
     {
          int nValue = rm.Next(20000);
          if (!hashtable.ContainsValue(nValue))
            {
                hashtable.Add(nValue, nValue);
                //Console.Write(nValue + "\t");
            }
      }
      DateTime afterDT = System.DateTime.Now;
      TimeSpan ts = afterDT.Subtract(beforDT);
      Console.WriteLine("DateTime总共花费{0}ms.", TotalMilliseconds);
}

在这里插入图片描述
 ②使用条件判断

//生成不重复的
static void Main(string[] args)
{
	DateTime beforDT = System.DateTime.Now;
    Random rand = new Random();
    int j = 1;
    int[] result = new int[10000];
    result[0] = rand.Next(20000);
    for (int i = 0; j < 10000; i++)
      {
          int temp = rand.Next(20000);
          for (int r = 0; r < j; r++)
             {
                if (result[r] == temp)
                {
                    break;
                }
                if (r == j - 1)
                {
                   result[j] = temp;
                   j++;
                }
             }
      }
      DateTime afterDT = System.DateTime.Now;
      TimeSpan ts = afterDT.Subtract(beforDT);
      Console.WriteLine("DateTime总共花费{0}ms.", ts.TotalMilliseconds);
}

在这里插入图片描述
从上面计算耗时来看,Hashtable用时比普通算法要多出3倍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值