random函数的用法

From:https://zhidao.baidu.com/question/70970762.html

random是as2.0中的全局函数,平时一般不用这个,而是使用Math包下的random方法(as2 as3均是)Math,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;
 
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值