delphi随机函数用法,该如何处理
delphi随机函数用法
每次随机生成1个0-100以内的整数,共生成10个数,且10个数都不重复。(初学者求指教)
------解决方案--------------------
修正一下
------解决方案--------------------
每次随机生成1个0-100以内的整数,共生成10个数,且10个数都不重复。(初学者求指教)
delphi
------解决方案--------------------
修正一下
var
Nums: array[0..9] of Byte;
I, Idx: Integer;
label
L1;
begin
Randomize;
Idx := Low(Nums);
FillMemory(@Nums, Length(Nums), $FF);
L1:
Nums[Idx] := Random(101);
for I := Low(Nums) to High(Nums) do
begin
if I = Idx then
Continue;
if Nums[I] = Nums[Idx] then
goto L1;
end;
if Idx < High(Nums) then
begin
Inc(Idx);
goto L1;
end;
end;
------解决方案--------------------
//CreateRandom(随机数取值范围起始值, 终止值; 返回数组长度)
function TForm11.CreateRandom(const RangeStart, RangeEnd, ResultCount : integer) : Tarray<Integer>;
var
tmpLst : TStringList; //可以使用泛型列表或数组代替
I, n: Integer;
begin
if RangeStart >= RangeEnd then
raise Exception.Create('错误的随机数范围!');
if ResultCount < 1 then
raise Exception.Create('随机数返回数组长度必须大于0!');
tmpLst := TStringList.Create;
tmpLst.Capacity := RangeEnd - RangeStart;
try
for n := RangeStart to RangeEnd do
begin
tmpLst.Add(IntToStr(n));
end;
Randomize;
SetLength(Result, ResultCount);
for I := 0 to ResultCount do
begin
n := Random(tmpLst.Count - 1);
Result[i] := StrToInt(tmpLst.Strings[n]);
tmpLst.Delete(n);
end;
finally
tmpLst.free;
end;
end;
procedure TForm11.btn1Click(Sender: TObject);
var
MyArr : Tarray<Integer>;
I : Integer;
s : string;
begin
s := '';
MyArr := CreateRandom(0, 100, 10);
for I := Low(MyArr) to High(MyArr) do
s := s + inttostr(Myarr[i]) + ' ';
ShowMessage(s);
s := '';
MyArr := CreateRandom(100, 1000, 15);
for I := Low(MyArr) to High(MyArr) do
s := s + inttostr(Myarr[i]) + ' ';
ShowMessage(s);
end;