在delphi中生成随机数

Car*_*hir 1 delphi random

我想在delphi中创建一个随机数,并将其作为文件名分配给文件.我设法做到了,但当我点击按钮生成数字时,它始终以0开头.任何想法如何解决它

procedure TForm1.Button1Click(Sender: TObject);
var
test:integer;

begin
test:= random(8686868686868);

edit1.Text:= inttostr(test);
end;

end.
Run Code Online (Sandbox Code Playgroud)

klu*_*udg 5

您的代码有两个问题。

  1. 您不调用Randomize,这就是为什么您总是将零作为第一个“随机”值。

  2. 8686868686868Random范围使用了太大的值,它超过了 32 位边界并等效于2444814356.

如果您只需要一个“随机”值,请使用

procedure TForm1.Button1Click(Sender: TObject);
var
  test:integer;

begin
  Randomize;
  test:= random($7FFFFFFF);

  edit1.Text:= inttostr(test);
end;
Run Code Online (Sandbox Code Playgroud)

  • 您不应重复调用 Randomize。通常在启动时一次就足够了。 (4认同)
  • 您不得在应用程序中多次调用“Randomize”。 (3认同)
  • @user246408:如果您快速连续地重复调用“Randomize”和“Random”,“Random”可能会返回相同的值或与前一个值仅相差几个数字的值。那不是随机的。正如文档中所述,您应该只使用 Randomize 一次或非常谨慎地使用。该文本仍然有效。 (2认同)

Tom*_*erg 5

正如user246408所说,您应该使用Randomize随机值初始化随机数生成器.此外,如果要将返回的数字限制为正整数,请使用预定义的MaxInt常量.

System.Random返回的重载函数integer具有以下签名:

  function Random(const ARange: Integer): Integer;
Run Code Online (Sandbox Code Playgroud)

并返回一个X满足公式的整数0 <= X < ARange.要防止0值,您可以添加选择的常量,例如

procedure TForm17.Button2Click(Sender: TObject);
const
  MinRandomValue = 100000;
var
  test:integer;
begin
  test:= random(MaxInt-MinRandomValue)+MinRandomValue;
  edit1.Text:= inttostr(test);
end;
Run Code Online (Sandbox Code Playgroud)

(从MaxInt中减去MinRandomValue以防止溢出)

或者,您可以使用System.Math.RandomRange

test := RandomRange(100000, MaxInt);
Run Code Online (Sandbox Code Playgroud)

记录在这里