1、不带参数的Random生成的随机数范围:0 <= Number < 1.0 2、带一个参数LimitPlusOne的Random函数,声称的随机数的范围为:0 <= Number < LimitPlusOne。 如果采用第1种,可以这样: n := 1111 + (9999 - 1111) * Random; 如果采用第2种,可以这样: n := 1111 + Random(9999 - 1111);
这是我以前的一个猜数字游戏的一段代码,也许对你有帮助。 procedure TMainForm.GetAimNo; //获得不重复的四位数字 var i: Integer; //Cycle var iTmp: Integer; // Temporary var begin sAllNo:='0123456789'; sAimNo:=''; Randomize; for i:= 1 to 4 do begin iTmp:= Random(10-i); sAimNo:= sAimNo + sAllNo[iTmp+1]; Delete(sAllNo,iTmp+1,1); end; Label1.Caption:=sAimNo; end;
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin while Memo1.Lines.Count<1000 do begin Randomize; i:=random(9999); if Memo1.Lines.IndexOf(IntToStr(i))<0 then Memo1.Lines.Add(IntToStr(i)); end; end;
對 hellolongbin(一个人[终不似 少年游]) 的一點改動 判斷重復關鍵用Memo1.Lines.IndexOf方法 procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Randomize; while Memo1.Lines.Count<1000 do begin i:=random(10000); if Memo1.Lines.IndexOf(IntToStr(i))<0 then Memo1.Lines.Add(IntToStr(i)); end; end;
2、带一个参数LimitPlusOne的Random函数,声称的随机数的范围为:0 <= Number < LimitPlusOne。
如果采用第1种,可以这样:
n := 1111 + (9999 - 1111) * Random;
如果采用第2种,可以这样:
n := 1111 + Random(9999 - 1111);
procedure TMainForm.GetAimNo; //获得不重复的四位数字
var
i: Integer; //Cycle var
iTmp: Integer; // Temporary var
begin
sAllNo:='0123456789';
sAimNo:='';
Randomize;
for i:= 1 to 4 do begin
iTmp:= Random(10-i);
sAimNo:= sAimNo + sAllNo[iTmp+1];
Delete(sAllNo,iTmp+1,1);
end;
Label1.Caption:=sAimNo;
end;
var i:integer;
begin
while Memo1.Lines.Count<1000 do
begin
Randomize;
i:=random(9999);
if Memo1.Lines.IndexOf(IntToStr(i))<0 then
Memo1.Lines.Add(IntToStr(i));
end;
end;
判斷重復關鍵用Memo1.Lines.IndexOf方法
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Randomize;
while Memo1.Lines.Count<1000 do
begin
i:=random(10000);
if Memo1.Lines.IndexOf(IntToStr(i))<0 then
Memo1.Lines.Add(IntToStr(i));
end;
end;