★★★关于二维动态数组的一个问题,不知道是怎么回事?我给100分。谢谢
//创建一个三角形矩阵
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);  //第一次循环时i在这里为0
      for j:=low(a[i]) to high(a[i]) 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开始?我的电邮是:[email protected] MSN是:[email protected]

解决方案 »

  1.   

    我跟踪了一下
    你第一次根本就没有进入循环啊!
    第二个for循环
    第一次为:for 0 to -1 
    第二次为:for 1 to 1
      

  2.   

    没什么错误呀!?
    k
    k1
    k12
    k123
    k1234
    k12345
    k123456
    k1234567
    k12345678
    k123456789
    是结果吧!
      

  3.   

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

  4.   

    这个程序没有什么错误啊,动态数组的下标都是从0开始的,你写的这个程序中的I和J也是从0开始的。这个程序的输出结果为:
    k
    k1
    k12
    k123
    k1234
    k12345
    k123456
    k1234567
    k12345678
    k123456789
      

  5.   

    setlength(a[i],i);第一次执行这句的时候i为0,所以for j:=low(a[i]) to high(a[i]) do在i等于0的时候也无法进入。
    当i等于1 的时候才进去内层的循环。
      

  6.   

    这个程序经过delphi编译器的优化后i就脱离了循环,所以你会看到i值一直不变,其实也不是不变,有实跟本就没值。你可以这样解决,再声明一个变量
    u:integer
    for i:=1 to 20 do
      u:=i;
      for j:=1 to 30 do
        u:=j;
    只要对循环变量赋一下值,就会一切正常了