Delphi中这段话While为什么造成了我程序死循环?

代码如下,我用意是在stringgrid1的第二列产生不相同的0到19之间的随机数,共20行,但是运行程序就卡住了,请教高手我哪步写错了,谢谢!procedureTFor... 代码如下,我用意是在stringgrid1的第二列产生不相同的0到19之间的随机数,共20行,但是运行程序就卡住了,请教高手我哪步写错了,谢谢!
procedure TForm1.Button1Click(Sender: TObject);

var
I,X,U,W:integer;
S:string;

begin
X:=20;
I:=0;
begin
Randomize;

for I:=0 to X do
begin
W:=1;

while W>=1 do
begin
W:=0;
S:= IntToStr(Random(X)+0);
for U:=0 to I do
begin
if StringGrid1.Cells[1,U]=S then
begin
W:=W+1;
end;
end;
end;//对应 while W>=1 do这句

StringGrid1.Cells[1,I]:=S;

end;//对应for I:=0 to X do这句
end;
end;
展开
 我来答
abidughw
2013-05-20 · TA获得超过904个赞
知道小有建树答主
回答量:572
采纳率:66%
帮助的人:285万
展开全部
for I:=0 to X 有X+1=21个空,Random(X)的返回值是[0,X)整数有X个,你这不是为难计算机么?最后一个空肯定和前面的所有都重复啊,于是你找不重复的时候就是缘木求鱼。
for I:=0 to X do改成for I:=0 to X-1 do估计就可以了。
匿名用户
2013-05-20
展开全部
procedure TForm1.btn1Click(Sender: TObject);
var
b: array[1..20] of integer;
i, temp: integer;
begin
for i := 1 to 20 do
b[i] := i;
for i := 1 to 20 do
begin
temp := Random(20 - i + 1) + 1;
StringGrid1.Cells[1, i] := IntToStr(b[temp]);
b[temp] := b[20 - i + 1];
end;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式