delphi的random函数的简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:51:25
问题如下:
for I:=1 to 10 do
begin
Randomize;
Canvas.TextOut(320+I*50,350,IntToStr(random(30)+1));
end;
可,这些数值当中总有几个是大于30的,甚至有90几的数,为什么呀?

你这个问题和Random函数没有一点关系,你的代码也没有错。

界面显示大于30的也没有错。

晕了吧!

原因是你用的是Canvas.TextOut来输出,前一次的输出和后一次的输出重叠就会出现大于30了。

不明白的话;,试试这样写:
var
i: integer;
begin
for I:=1 to 10 do
begin
Randomize;
Canvas.TextOut(320+I*50,350, Format('%.2d',[Random(30)]));
end;
end

似乎不太可能,我怎么测试都没有超过30的。
实在不行就加上一句判断算了:
i:=1
while i<=10 do
begin
Randomize;
a:=random(30);
if a<31 then
begin
Canvas.TextOut(320+I*50,350,inttostr(a));
inc(i);
end;
end;