这个例子中,我们使用Random.Next()方法来产生随机数。
下面这个函数是这个例子的核心,我们利用他来产生一个随机的int数组:
private int []GetRandomArray(int Length,int Up,int Down){ int iFirst=0; int []rtArray=new Int32[Length]; Random ro=new Random(Length*unchecked((int)DateTime.Now.Ticks)); iFirst=ro.Next(Up,Down); rtArray[0]=iFirst; for(int i=1;i
读者或许都注意到了,我们采用了一种相当麻烦的方式来产生这个随机数组,为什么不简单地使用如下代码呢?请先看下面代码,这里我们使用了系统时间作为随机种子,连续获取两个随机数,并且将其输出:
< %@ Page Language="C#" Debug="true" Trace="false" TraceMode="SortByCategory"% >< % @Import namespace="System" % >
< script language=C# runat=server >
public void Page_Load(object sender,EventArgs e){ int re=0; int re1=0; GetRandomDefault(ref re); GetRandomDefault(ref re1); RandomNum.Text=re.ToString(); RandomNum.Text+=" "+re1.ToString();}private void GetRandomDefault(ref int re){ Random ro=new Random(unchecked((int)DateTime.Now.Ticks)); re=ro.Next(10,20);}private void GetRandomByInt(ref byte []re){ Random ro=new Random(); ro.NextBytes(re);}
< /script >
< html >
< head >
< title >随机数测试< /title >
< meta http-equiv="Content-Type" content="text/html; charset=gb2312" >
< /head >
< body bgcolor="#FFFFFF" text="#000000" >
< form runat=server >
< asp:Label id="RandomNum" runat=server / >
< /form >
< /body >
< /html >
下面是笔者机器上产生的结果的截图: 
是的,如你所见,产生了一样的两个随机数,无论重复多少次,都是一样的。原因在哪里呢?
不要以为使用系统时间作为随机种子就万无一失了——如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种情况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够“随机”,我们不得不使用复杂一点的方法来获得随机种子。
在上面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够“随机”的随机数。
得到整型的随机数组以后,我们将它变成字符串,然后使用System.Drawing中与GDI+相关的类生成一个图片并且在网页上显示出来。
生成图片的ASP.net页面全部代码如下:
< %@ Page Language="C#" Debug="true" Trace="false" TraceMode="SortByCategory"% >< % @Import namespace="System.Drawing" % >< % @Import namespace="System.Drawing.Imaging" % >< % @Import namespace="System.Drawing.Text" % >< % @Import namespace="System.IO" % >< script language=C# runat=server >
public void Page_Load(object sender,EventArgs e){ string strNum=GetRandomString();
string strFontName;
int iFontSize;
int iWidth;
int iHeight;
strFontName="宋体";
iFontSize=12;
iWidth=10*strNum.Length;
i
共有 0 位网友发表了评论,平均得分: 0 查看完整内容