for m := 1 to 35 do
  if bnum[m] = bnum[m+1] then astr := astr + ',' + inttostr(anum[m])
  else  astr := astr + chr(13) + chr(10) + inttostr(bnum[m]) + ':' + inttostr(anum[m]);这样一条语句,我逐句观察的时候,发现m是从35往1走得,睡知道怎么回事?
另外,在这段程序外,不能对m进行赋值,即使赋了,也不提示错,但运行中空过此行?

解决方案 »

  1.   

    不可能啊,从这一句语法是没有错误啊?
    可能是不是你别的地方定义错了啊?
    最大的可以是bnum[x]和anum[x]的附值顺序错了.
      

  2.   

    如你所说,可能是anum[]中存放的数据顺序反了,
    在循环过程中是不能对循环变量进行赋值的,在循环体外,m就不时循环变量了,这时可对其赋值.为什么会出现你所说的情况要看代码啦.
      

  3.   

    在For循环中不允许改变m的值,这是object pascal的规定
      

  4.   

    快晕了,我把这段代码单独放到一段里,还是不行。procedure TForm8.Button10Click(Sender: TObject);
    var
    astr : string;
    i,j,m,a1,b1 : integer;
    aNum, bNum : array [1..36] of integer;
    begin
    astr := '';
    for i := 1 to 36 do begin aNum[i] := strtoint(StringGrid1.cells[i, StringGrid1.RowCount-5]); bNum[i] := i; end;
    for i := 1 to 35 do
    &&&&&&&&&&&&&&
      for j := i + 1 to 36 do   
    &&&&&&&&&&&&&&
        if aNum[i] > aNum[j] then
        begin
          a1 := aNum[i]; aNum[i] := aNum[j]; aNum[j] := a1;
          b1 := bNum[i]; bNum[i] := bNum[j]; bNum[j] := b1;
        end;astr := inttostr(anum[1])+ ':' + inttostr(bnum[1])  ;
    ********
    for m := 1 to 35 do  
      if bnum[m] <> bnum[m+1] then astr := astr + chr(13) + chr(10) + inttostr(anum[m+1])+ ':' + inttostr(bnum[m+1]) else astr := astr + ',' + inttostr(anum[m+1]);
    ********memo1.Lines.Add(astr);
    end;就是在********之间的代码出现了上面的问题,另外,如果把&&&&&&&&&&&&&&之间的for j := i + 1 to 36 do   换成j := 2 to 36 do也会出现类似的问题,究竟怎么回事呀?