★★★关于二维动态数组的一个问题,不知道是怎么回事?我给100分。谢谢(100分)

B

bcfans

Unregistered / Unconfirmed
GUEST, unregistred user!
★★★关于二维动态数组的一个问题,不知道是怎么回事?谢谢
//创建一个三角形矩阵
procedure TForm1.Button1Click(Sender: TObject);
var
a:array of array of string
//二维动态数组
i,j:integer;
tempstr:string;
begin
listbox1.Clear;
setlength(a,10)

for i:=low(a) to high(a) do
begin
tempstr:='k';
setlength(a,i)
//第一次循环时i在这里为0
for j:=low(a) to high(a) do
begin
a[i,j]:=inttostr(j+1)
{第一次循环时i在这里却不为0了(我不知道它现在为何值了,总之不为0)。i在外层循环进入这层循环时也没有变化呀!怪了!!谁能解释一下,谢谢了!}
tempstr:=tempstr+a[i,j];
end;
listbox1.Items.Add(tempstr);
end;
end;

还有就是动态数组的下界是不是都是从0开始?上面的i和j是不是都是从0开始?我的电邮是:onlydelphi@hotmail.com MSN是:onlydelphi@hotmail.com
 
procedure TForm1.Button1Click(Sender: TObject);
var
a:array of array of string
//二维动态数组
i,j:integer;
tempstr:string;
begin
listbox1.Clear;
setlength(a,10);
for i:=low(a) to high(a) do
begin
tempstr:='k';
setlength(a,i)
//第一次循环时i在这里为0
/////////////////////
showmessage(inttostr(low(a))+' ' +inttostr(high(a)));

// 加上上面一句你就会明白,i=0 时, high(a[0]) 是 -1
// 下面的循环体没有执行。
//////////////////////
for j:=low(a) to high(a) do
begin
a[i,j]:=inttostr(j+1)
{第一次循环时i在这里却不为0了(我不知道它现在为何值了,总之不为0)。i在外层循环进入这层循环时也没有变化呀!怪了!!谁能解释一下,谢谢了!}
tempstr:=tempstr+a[i,j];
end;
listbox1.Items.Add(tempstr);
end;
end;
 
太长,没看明白
 
动态数组下标均从0开始,所以你该改语句
setlength(a,i)
为 setlength(a,i+1);
 
多人接受答案了。
 
顶部