`
ch_kexin
  • 浏览: 898054 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

C#随机函数random如何使用?

阅读更多
随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等。本文讨论如何在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数,并通过此文介绍Visual c#中随机数的用法。
.net.Frameword中提供了一个专门产生随机数的类System.Random,此类默认情况下已被导入,编程过程中可以直接使用。我们知道,计算机并不能产生完全随机的数字,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。

我们可以用以下两种方法初始化一个随机数发生器;

第一种方法不指定随机种子,系统自动选取当前时前作随机种子:

Random ra=new Random();

第二种方法是指定一个int型的参数作为随机种子:

int iSeed=6;

Random ra=new Random(iSeed);

下面我们要用到Random.Next()方法产生随机数。

ra.Next();

它返回一个大于或等于零而小于2,147,483,647的数,这并不满足我们的需要,下面我们介绍它的重载函数和其它一些方法。

public virtual int Next(int);

用法:ra.next(20)

返回一个小于所指定最大值(此处为20)的正随机数。

public virtual int Next(int minValue, int maxValue);

用法:ra.next(1,20)

返回一个指定范围内(此处为1-20之间)的随机数,我们在下面的实例中会用到此函数。

类System.Random还有几个方法分别是:

公共方法:

NextBytes用随机数填充指定字节数组的元素。

NextDouble返回一个介于 0.0 和 1.0 之间的随机数。

受保护的方法:

Sample返回一个介于 0.0 和 1.0 之间的随机数,只允许子类对象访问。

以上介绍了随机数的基本用法,下面我们用一个实例来做更进一步的介绍。要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。

主要是下面两个函数getRandomNum与getNum:

public int[] getRandomNum(int num,int minValue,int maxValue)

{

Random ra=new Random(unchecked((int)DateTime.Now.Ticks));

int[] arrNum=new int[num];

int tmp=0;

for (int i=0;i<=num-1;i++){

tmp=ra.Next(minValue,maxValue); //随机取数

arrNum[i]=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值赋到数组中

}

return arrNum;

}

getRandomNum即是在区间[minValue,maxValue]取出num个互不相同的随机数,返回的数组包含着结果。

其中随机数是这样创建的 Random ra=new Random(unchecked((int)DateTime.Now.Ticks));为什么不用Random ra=new Random();(系统自动选取当前时前作随机种子)呢?

用系统时间做随机种子并不保险,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种情况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够"随机",我们不得不使用复杂一点的方法来获得随机种子。在上面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够"随机"的随机数。

函数getNum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。值得注意的是要用一同一个随机数实例生成,所以ra要作为参数传入getNum中,否则生成的数字会有重复。

public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra){

int n=0;

while (n<=arrNum.Length-1)

{

if (arrNum[n]==tmp) //利用循环判断是否有重复

{

tmp=ra.Next(minValue,maxValue); //重新随机获取。

getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。

}

n++;

}

return tmp;

}

最后就是要显示出来,当点击一个button时取出的数字显示在一个label中。

private void button1_Click(object sender, System.EventArgs e)

{

int[] arr=getRandomNum(6,1,20); //从1至20中取出6个互不相同的随机数

int i=0;

string temp="";

while (i<=arr.Length-1){

temp+=arr[i].ToString()+"\n";

i++;

}

label1.Text=temp; //显示在label1中

}

随机数的作用不止如此,读者可用它进行游戏开发,安全验证等等,这有待读者去开发和实践。

原码如下:

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

namespace random

{

///

/// Form1 的摘要说明。

///

public class Form1 : System.Windows.Forms.Form

{

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Label label1;//

/// 必需的设计器变量。

///

private System.ComponentModel.Container components = null;

public Form1()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

//

// TODO: 在 InitializeComponent 调用后添加任何构造函数代码

//

}

///

/// 清理所有正在使用的资源。

///

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code

///

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

///

private void InitializeComponent()

{

this.button1 = new System.Windows.Forms.Button();

this.label1 = new System.Windows.Forms.Label();

this.SuspendLayout();

//

// button1

//

this.button1.Location = new System.Drawing.Point(96, 32);

this.button1.Name = "button1";

this.button1.TabIndex = 0;

this.button1.Text = "随机数";

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// label1

//

this.label1.BackColor = System.Drawing.SystemColors.Desktop;

this.label1.ForeColor = System.Drawing.SystemColors.ActiveCaptionText;
分享到:
评论

相关推荐

    C#随机函数random()典型用法集锦

    根据给定的文件信息,我们将深入探讨C#中随机数生成器`Random`类的典型用法,并结合具体的代码示例进行详细解析。 ### 1. 基本使用:生成指定范围内的随机整数 #### `Random.Next()` `Random.Next()`方法是生成...

    C# 随机函数

    本篇文章将深入探讨如何在C#中使用随机函数来生成0到100范围内的随机正整数。 首先,C#提供了一个名为`System.Random`的类,它包含了各种方法用于生成随机数。生成0到100(包括0,但不包括100)之间的随机正整数,...

    C#学习笔记- 随机函数Random()的用法详解

    例如,为影片剪辑设置随机颜色值可以使用`mcColor.setRGB(random(0xFFFFFF))`。 总的来说,C#中的随机数生成功能强大且灵活,开发者可以根据实际需求选择适合的方法,甚至通过组合和扩展现有功能来满足更复杂的...

    C#中random函数使用 抓阄系统

    总的来说,这个"C#中random函数使用 抓阄系统"项目是一个很好的实践,它涵盖了C#基础语法、面向对象编程以及GUI应用开发。通过这个项目,开发者可以提升自己在C#语言和`WinForm`应用开发方面的技能。同时,对于理解`...

    伪随机函数\随机函数

    理解并熟练使用伪随机函数和随机函数是C#程序员的基本技能之一。它们在模拟、测试、加密等多个领域都有广泛的应用。在编写代码时,应根据具体需求选择合适的随机数生成方式,以确保结果的随机性和安全性。同时,了解...

    C# Random 随机函数案例 卜卦游戏

    部分代码 private void number() { int random; Random R = new Random(); random = R.Next(0, 6); //。。。。。。。。。。。。。。

    VS2005C#编写的random算法的源代码

    在提供的压缩包文件“random算法的源代码”中,可能包含了各种`Random`类的应用实例,例如不同类型的随机数生成、随机选择、随机排列等,这将有助于我们进一步学习和掌握C#中的随机数处理技术。

    C# 生成随机字母字符串

    首先,要生成随机字符串,我们需要使用C#中的`System.Random`类来生成随机数。这个类提供了多种方法来生成指定范围内的整数,我们可以利用这些整数来选择字母表中的字符。在ASCII码中,小写字母的范围是97('a')到...

    c# 随机函数的使用详解

    代码如下:private static char[] constant = { ‘0’,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′, ‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’...

    math.random用法

    可以使用 Math.round(Math.random()) 生成一个 0 或 1 的随机整数,该函数可以用在各有 50%的可能的情况下,例如抛硬币,或者 true/false 指令。 4. 生成随机数范围 可以使用 Math.round(Math.random()*10) 生成...

    C# 随机生成汉字 随机生成汉字

    本篇文章详细介绍了如何使用C#语言实现随机生成汉字的功能,重点解析了GB2312编码的使用以及生成随机汉字的具体算法实现。这种技术在多种应用场景下都有广泛用途,例如数据测试、字符识别训练等。通过深入理解GB2312...

    c# asp.net 随机码通用生成类

    3. **生成随机码**:根据设定的参数生成随机字符串,可以使用`Random`类的`Next`方法结合字符数组来实现。 4. **生成图片**:生成的随机码转化为图像,可以使用`System.Drawing`命名空间下的`Graphics`、`Font`、`...

    Random函数

    C# 中的 Random 函数是生成随机数的主要工具,本文将详细介绍 Random 函数的使用方法和实现原理。 首先,Random 类是 .NET Framework 中提供的专门产生随机数的类,默认情况下已经被导入,编程过程中可以直接使用。...

    随机函数库

    本文将深入探讨C#中的随机函数库,以及如何使用这些功能。 C#中的随机数生成主要通过`System.Random`类实现。这个类提供了多种方法来生成不同类型的随机数,如`Next()`、`NextBytes()`和`NextDouble()`等。`Next()`...

    C#自作随机点名程序

    C#中的`Random`类可以生成随机数,我们可以利用它来随机选取一个索引,从而得到对应的名字。如下所示: ```csharp Random rand = new Random(); int randomIndex = rand.Next(names.Count); // 获取0到names.Count-...

    C#做的随机抽奖系统

    在C#中,`Random.Next()`方法可以生成指定范围内的随机整数。为了确保每个参与者有相等的机会,开发者可能会将所有参与者的编号放入一个集合,然后通过随机数选择获胜者。此外,为了防止重复抽取,每次抽取后,可能...

    C#开发的随机点名程序

    为了确保每次运行都能得到不同的结果,我们可能需要对Random类的种子进行特殊处理,或者使用DateTime.Now.Millisecond获取当前时间作为种子,以增加随机性。 程序的用户界面(UI)设计也很关键。C#提供了Windows ...

Global site tag (gtag.js) - Google Analytics