Randomize & Random

在学习ProcessMessage函数时候看到了这个代码,没用过Randomize函数,所以顺便学习学习;

procedure TForm1.Button1Click(Sender: TObject); var I, J, X, Y: Word; begin I := 0; J := 0; while I < 64000 do begin Randomize; while J < 64000 do begin Y := Random(J); Inc(J); end; X := Random(I); Inc(I); end; Canvas.TextOut(10, 10, 'The Button1Click handler is finished'); end;

这个函数在帮助里面的原说明如下:

Initializes the random number generator with a random value.

前面的Initializes the random number generator 应该翻译为:初始化随机数产生器  这应该是没错的,但with a random value 怎么翻译呢,用一个随机值?接着往下看,下面还有个Y:=Random(J);会不会跟这个函数有关系?继续查random()函数:

Generates random numbers within a specified range.//翻译为:在指定的范围内产生随机数

Delphi syntax:

function Random [ ( Range: Integer) ];

下面还有更详细的说明:

In Delphi code, Random returns a random number within the range 0 <= X < Range. If Range is not specified, the result is a real-type random number within the range

0 <= X < 1.

 

到此,我还是看不出来这两个函数有什么关系,再看一下Randomize 的description:

Description

Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed.

{Randomize 用一个随机值来初始化内置的随即数产生器(这个随机值来自于系统时钟)。随即数产生器通过调用Randomize函数或指定RandSeed变量来进行初始化。}

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.

{不要在同一层循环内同时调用Randomize和Random函数。典型的应用是,在所有的random函数前调用一次Randomize}

 

我的理解是,随即数的产生是要根据系统时钟进行变化的,randomize的作用就是将 the built-in random number generator 和系统时钟挂钩,接下来的random函数才会起作用。

 

靠理论不行,写个例子:

procedure TForm1.bt_3Click(Sender: TObject); var i:Integer; begin //Randomize; Memo_1.Lines.Clear; for i := 1 to 100 do Memo_1.Lines.Add(IntToStr(Random(100))); end;

注销randomize,运行,没什么问题啊,照样变化!
把注销去掉,运行,也能变化!
怎么回事,d7合二为一了?
放到d5下,还是一样!
怎么回事?
到网上一查,是去掉randomize后,运行几次的随即数取值都相同,而不是在一次运行期间的数据变化不变。仔细看了一下,果然如此。
到此,这两个函数我搞明白了。
明白是明白了,可是,以前都是直接写Random没有randomize!汗!还好那个数据的重复率几乎为0,要不麻烦大了。
以后还是多看看书,多看看别人的代码。

你可能感兴趣的:(Randomize & Random)