红鱼儿

生成指定范围的随机数序列

有这样一个需求,我要生成1,2,3...100,其顺序是随机的。

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j: Integer;
  lst: TList<Integer>;
  rd: TkbmMWRandomPCGUInt32;
  r: Integer;
begin

  Log.TimeStart('random');
  j:=strtoint(Edit1.Text); //生成数字的个数.
  lst := TList<Integer>.Create;
  rd := TkbmMWRandomPCGUInt32.Create;
  for i := 1 to j do
  begin
    r := rd.Random(1, j+1);
    while lst.Contains(r) do
//    while lst.IndexOf(r)<>-1 do
    begin
      r := rd.Random(1, j+1);
    end;
    lst.Add(r);
  end;
  Log.TimeEnd('random', '生在完毕:'+Edit1.Text);

//  memo1.Lines.Clear;
//  for i := 0 to lst.count-1 do
//  begin
//    memo1.Lines.Add(Format('i=%d value=%d',[i,lst[i]]));
//  end;

  lst.Free;
  rd.free
end;

 下面是运行结果:

这个代码中使用了kbmMW随机数生成器TkbmMWRandomPCGUInt32,需要注意的就是Random生成的数字范围,Random(a,b),只生成a与b-1范围内的整数,不含b,例如a=1,b=10,那么只生成1到9间的随机数。

 

posted on 2019-07-25 18:22  红鱼儿  阅读(781)  评论(0编辑  收藏  举报