首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

随机函数请问

2012-02-16 
随机函数请教radomizea :random(3)b : random(3)看一下结果 ab1ab1ab2ab0为啥都是一样的

随机函数请教
radomize;
a := random(3);
b := random(3);
看一下结果 a=b=1; a=b=1; a=b=2; a=b=0; 为啥都是一样的结果,怎么可以实现 a=1 b=2; a=2 b=1 ;a=0 b=2 这样的结果呢?

  

 

[解决办法]
Randomize不是radomize
[解决办法]
随机前都要初始化随机数种子

Randomize;
a := random(3);
Randomize;
b := random(3);

[解决办法]

探讨
随机前都要初始化随机数种子

Randomize;
a := random(3);
Randomize;
b := random(3);

[解决办法]
楼主的代码没有错误, 

不用每次都随机分配

我的机器 WIN7 + DXE 测试没有问题



procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
end;

输出结果都是随机的


[解决办法]
我觉得如果是
Delphi(Pascal) code
Randomize;a := random(3);Randomize;b := random(3);
[解决办法]
Random(整数)实际上是调用RandInt,阅读RandInt函数,
Delphi(Pascal) code
procedure       _RandInt;asm        XOR     EBX, EBX        IMUL    EDX,[EBX].RandSeed,08088405H        INC     EDX        MOV     [EBX].RandSeed,EDX  <-重置随机数因子        MUL     EDX        MOV     EAX,EDX        POP     EBX
[解决办法]
要注意 命令的大小写

[解决办法]
探讨

要注意 命令的大小写

[解决办法]
探讨
随机前都要初始化随机数种子

Randomize;
a := random(3);
Randomize;
b := random(3);

[解决办法]
不断调用random函数,得到的是一个长度为4G的整数序列的反复出现
randomize是让这个序列的起点换一下而已(相当于一个环型整数序列,起点也就是4G个)

一般调用random函数的次数不会超过几M,所以,只要第一次之前randomize一次就行了
第一次之前都没randomize,则得到的整数序列的起点始终是一样的,亦即整数序列本身都是一样的了

热点排行