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  这样的结果呢?               

解决方案 »

  1.   

    随机前都要初始化随机数种子Randomize;
    a := random(3);
    Randomize;
    b := random(3);
      

  2.   

    楼主的代码没有错误, 不用每次都随机分配我的机器 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;输出结果都是随机的
      

  3.   

    我觉得如果是Randomize;
    a := random(3);
    Randomize;
    b := random(3);这样的代码反倒容易出现同样的数。
      

  4.   

    Random(整数)实际上是调用RandInt,阅读RandInt函数,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,只需要初始化一次即可,楼主的重复只是巧合,0,1,2这3种情况,出现随机数相同的情况是比较容易的,
      

  5.   

    这是delphi区,不用管大小写。
      

  6.   


    一般都是在程序开头写入RandomIze;
    其它时间没管过.难道每次使用都要先Randomize;啊...
      

  7.   

    不断调用random函数,得到的是一个长度为4G的整数序列的反复出现
    randomize是让这个序列的起点换一下而已(相当于一个环型整数序列,起点也就是4G个)一般调用random函数的次数不会超过几M,所以,只要第一次之前randomize一次就行了
    第一次之前都没randomize,则得到的整数序列的起点始终是一样的,亦即整数序列本身都是一样的了
      

  8.   

    你调用Random(MaxInt)就会发现不一样了。
      

  9.   

    对,反复 randomize 是不对的,只要程序在初始化的时候调用一次就好了。