ASP.NET中随机数生成及应用

转载 2006年09月13日 23:27:00

 

ASP.NET中随机数生成及应用
 
作者:王瑞胡王宇出处:计算机与信息技术责任编辑: 方舟[ 2005-11-30 16:16 ]
伪随机数在计算机软件设计中有很广泛的用途。本文介绍了伪随机数生成的一般原理
 
    随机数在计算机软件设计中有很广泛的用途。本文介绍了伪随机数生成的一般原理,以及利用ASP.NET Framework中提供的Random类及其方法来生成各种不同范围的满足各种要求的随机数。最后结合Web控件表单阐述了ASP.NET中的随机数在软件设计中的应用。

  关键词  ASP.NET;伪随机数生成;Web; Random

 
  随机数在软件设计,尤其是在实践环境模拟和测试等领域中得到很广泛的应用。为追求真正的随机序列,人们曾采用很多种原始的物理方法用于生成一定范围内满足精度(位数)的均匀分布序列,其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等。为满足计算机模拟研究的需求,人们转而研究用算法生成模拟各种概率分布的伪随机序列。伪随机数是指用数学递推公式所产生的随机数。从实用的角度看,获取这种数的最简单和最自然的方法是利用计算机语言的函数库提供的随机数发生器。不同的开发环境提供的生成随机数的函数和方法不一样。典型情况下,它会输出一个均匀分布在01区间内的伪随机变量的值。

 
  随机数发生器

  在计算机中产生随机数的方法,经常采用下面的公式:





  用这个公式产生0~65536的随机数a1a2序列的程序,称为232步长的倍增谐和随机数发生器。其中bcd为正整数d称为由公式所产生的随机序列的种子。

   
  由该公式可以看出,一旦参数bcd确定之后,所产生的随机序列也是确定的。这种只在一定程度上满足随机性的序列称为伪随机数。

  下面是随机数发生器的一个例子。其中,函数random_seed提供给用户选择随机数的种子,当形式参数d=0时,取系统当前时间作为随机数种子;当d≠0时,就选用d作为种子;函数random在给定种子的基础上,计算新的种子,并产生一个范围为low~high的新的随机数。
#define  MULTIPLIER   0x015A4E35L
#define  INCREMENT   1

void  random_seed
( unsigned long  d){
 if ( d == 0 )seed = time(0);
 else  seed = d;}
 unsigned  int random(unsigned long low,unsigned long high)
 {
      seed = MULTIPLIER * seed + INCREMENT;
      return ((seed >>16 )% ( high-low ) + low );
 }
}

 
  ASP.NET中伪随机数生成机制

  计算机不可能产生完全随机的数字。所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。

  1VB.NET内建函数

     
  ASP.NET程序可以采用多种编程语言,其默认的程序语言是VB.NET,虽然VB.NETVB有些相似,但它们的应用环境不一样,编写代码的方法也有所不同。VB.NET中,如果要使用数学函数,必须通过.NET Framework提供的Math类,它位于System命名空间下,用户可以在代码顶部添加Imports System. Math以便使用这些数学函数。

  其中用于产生随机数的函数原型为:Rndx),该函数用以产生一个介于0~1之间的单精度随机数。x是产生随机数的种子。如果要从(min, max)这个范围内随机抽取一个数,此时需要用到公式:随机数 = (max - min) * Rnd(x) + min

  伪随机数的选择是从随机种子开始的,为了保证每次得到的伪随机数都足够地随机,随机种子的选择就显得非常重要。如果选择的随机种子一样则生成的随机序列也相同。一般地,使用同系统时间有关的参数作为随机种子,这也是.net Framework中的随机数发生器默认采用的方法。

  2、随机数类System.Random

  随机数类System.Random类提供以下方法用于产生各种满足不同要求的随机数,如表1所示:

  表1    System.Random类提供的各种方法
编号
方法名称
功能描述
1
Next()
返回一个0~2147483647之间的整数
2
Next(i)
返回一个0~i之间的整数
3
Next(i,j)
返回一个i~j之间的整数
4
  Nextdouble()
返回一个0~1之间的随机小数
5
 Nextdouble(  byte())
用0~255之间的随机整数作为字节数组各元素的值。

  使用随机数类System.Random必须先声明。如果要使用Nextbytesbyte())方法,在使用前也必须声明字节数组。

  3、测试程序编写

  在运行ASP.NET程序前必须建立其开发运行环境,包括配置Microsoft IIS和安装.NET Framework SDK以及机MSE编辑器。MSE编辑器是Microsoft Office的一个附加软件,作为ASP.NET的编辑工具非常方便。测试程序代码如下:
<script language="vb" runat="server">

sub page_load(send as object,e as eventargs)
 dim r1 as random =new random()
 response.write("The result of r1.next()is:"+r1.next().tostring())
 response.write("Theresultofr1.next(100)is:" +r1.next(100).tostring())
 response.write("The result of r1.next(100,150) is:"+r1.next(100,150).tostring())
 response.write("The result of r1.nextdouble() is:"+r1.nextdouble().tostring())
 r1.nextbytes(r)  // dim r(300) as byte
 response.write("the r(100) is:")
 response.write(r(199))
 end sub </script>

  其测试结果如图1所示:

实例开发

  应用程序需求分析:创建一个用于模拟掷骰子游戏的应用程序。此游戏中,游戏者将随机滚动一个骰子。每一个骰子有六个面,分别代表123456这六个点。当骰子停下以后,观察骰子上表面的点数。如果掷得的点数为6,则提示赢的信息,否则将继续投掷。

  1、关键技术

  1.1  Web控件表单

 
  Web控件表单具有高级语言的面向对象的特性,它是ASP.NETSystem.Web.UI.WebControls命名空间的对象。其处理过程与HTML控件表单相似,有如下几个特点:表单在服务器端运行;输入域都是控件,具有强大且丰富的属性和方法,输入域的信息可以保留;具备对输入域的验证能力;包含有数据显示控件等。

  一个典型的Web控件表单代码如下:

  <asp: button id=”sub3”  text=”confirm” runat=”server”/

  其中ASPXXX指明是哪一类Web控件;ID属性指明控件的标识名称;Runat属性的值为server,指明这是在服务器端运行的控件。

   
  本例中将用到的Web控件主要为按钮控件。其中Image控件用于显示图像文件,有以下几个属性:Imageurl,指明图像文件的URLWidth,图像文件显示的宽度;Height,图像文件显示的高度等。

  1.2  伪随机数生成

    
  根据需求分析描述,为模拟随机投掷骰子所得到的点数,需要随机产生范围在1~6之间的整数,此时可利用到System.Random类的Nextij)方法,这里i=1j=7。(笔者编写了一个测试程序发现如果j=6,所生成的随机数在1~5之间)

  2、程序实现

  该程序的主要代码实现如下:
<script language="vb"  runat="server">

sub disp(obj as object,e as eventargs)

dim r1 as random =new random()   //定义一个随机数类

dim file_prefix as string = "Images/die"

dim file_suffix as string = ".png"

value = r1.next(1,7)  //dim value as Integer

s1 = file_prefix + value.tostring() + file_suffix

pic1.imageurl = s1  //更新Image控件的imageurl属性

if value = 6 then

     disp.text = "You win"  //显示提示信息

else

     disp.text = "Try again"

end if

end sub

</script>

<form id="form1" runat="server"><br>

<asp:button id="disp" runat="server" onclick="disp" text="start"/>

<asp:image id="pic1" runat="server" width="50" height="50"/></form>

  程序的运行结果如图2所示:



          
2   程序运行结果

 
  结束语

   
  Web应用程序中有很多地方都要用到伪随机数,如何选择生成随机序列的种子参数,以及选用何种随机算法以期生成性能更佳的伪随机序列是计算机软件开发人员追求的目标之一。利用ASP.NET框架提供了伪随机数生成类以及脚本语言VB.NET提供的函数方法可以生成各种满足不同要求的随机序列。如在Web系统中用于身份认证的随机校验码就用到了随机数生成的技术,这点在网站上有很多文章介绍,在此不再赘述。
 

ASP.NET中主题的创建和应用

1创建ASP.NET网站 模板->选择 添加ASP.NET文件夹 下面的属性
  • yayun0516
  • yayun0516
  • 2014年07月08日 16:16
  • 1186

C++伪(pseudo)随机数生成及简单应用

两个主要函数 两个简单应用 如果设定种子值,matlab:rng(),c++:srand(unsignd),则最终得到的随机数,无论是一个还是一个vector,都是固定的,可见有一种内部的机制(m...
  • lanchunhui
  • lanchunhui
  • 2015年09月28日 17:49
  • 858

ASP.NET中Theme使用方式

Theme使用方式
  • avon520
  • avon520
  • 2011年02月18日 17:18
  • 929

ASP.NET项目中各个文件夹的含义

1.  Bin文件夹  Bin文件夹包含应用程序所需的,用于控件、组件或者需要引用的任何其他代码的可部署程序集。该目录中存在的任何.dll文  件将自动地链接到应用程序。如果在该文件夹中留有不用的或过...
  • Vivian8725118
  • Vivian8725118
  • 2014年01月20日 18:08
  • 3688

ASP.NET常见面试题及答案(130题)

Asp.net核心技术思想  1、概述反射和序列化 反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到...
  • qq1162195421
  • qq1162195421
  • 2014年02月19日 13:45
  • 2859

asp.net随机数

Random rnd = new Random(); int rndNum = rnd.Next(); //int 取值范围内的随机数 int rndNum...
  • u014796999
  • u014796999
  • 2016年04月20日 21:10
  • 982

SQL Server 存储过程在ASP.NET中的应用

     今天遇到的问题是需要尽量简化ASP.NET中访问SQL Server的操作。直接用SQL语句肯定是不行了,因为这样并不便于后期的程序维护,也不符合编程的习惯(尽量把数据和控制分开),通常的在...
  • sailor32731958
  • sailor32731958
  • 2010年01月06日 23:28
  • 355

Asp.Net面试题

多线程同步: 1、Lock,lock的参数必须是基于引用类型的对象 2、System.Threading.Interlocked,对于整数数据类型的简单操作,可以用 Interlocked 3...
  • cctvcqupt
  • cctvcqupt
  • 2017年05月13日 21:09
  • 384

asp.net--一般处理程序的应用

一般程序只能输出简单结果没有HTML代码项目下载
  • qq_36482772
  • qq_36482772
  • 2017年09月22日 08:45
  • 114

Asp.net MVC ViewData学习

ViewData用于 控制器(Controller)向视图(View)中传值 在Controller中使用ViewData: HomeController.CS Index.aspx: ...
  • lilin8905
  • lilin8905
  • 2015年03月23日 21:25
  • 429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET中随机数生成及应用
举报原因:
原因补充:

(最多只允许输入30个字)