对于Delphi 6中的循环初始化错误

时间:2018-03-19 04:47:50

标签: loops delphi delphi-6

我在Delphi 6程序中有这个order循环对:

Event

我添加了forprocedure TNumbers.CleanTable(Sender: TObject); var Index: integer; JIndex: integer; IEND, JEND: integer; Obj: TObject; begin IEND := length(Correspondence); JEND := length(Correspondence[0]); for Index := 1 to IEND-1 do begin for JIndex := 1 to JEND -1 do begin obj := SearchForTagID(Correspondence[Index,JIndex], Sender); if obj = nil then continue; if obj is TComponent then begin if TComponent(Obj).Tag = Correspondence[Index, JIndex] then // make sure search was successful begin VoidCaption(obj); end; end; end; end; end; 变量,而不是直接调用IEND,因此我可以关注结果。

现在问题的症结在于循环的控制变量未正确初始化。 JEndlength都应该从1开始(跳过数组的前沿,包含标题,而不是数据)。但是,我从indexJIndex开始就是IndexJindex

我尝试评论整个块,只保留循环;我甚至评论了IEND声明,以防可能影响循环。没有改变。我仍然有错误的循环初始化。

有没有人见过这个?在我40年的编程中,这是我第一次看到这样的东西,并且我公平地分享了JEND循环错误!

由于缺少解决方案,我使用此代码替换了obj循环,该代码有效:

for

如果我不能用这么简单的循环系统来信任编译器,那我就陷入了深深的麻烦。

有关原因的任何建议吗?

1 个答案:

答案 0 :(得分:0)

您确实对索引感到困惑。 JIndex明显不正确,因为Index=0次迭代只计算一次。

不要使用while,而是使用两个嵌套for循环:

procedure TNumbers.CleanTable(Sender:TObject);
var
  i, j: integer;
  obj: TObject;
begin
  for i := 0 to high(Correspondence) do
    for j := 0 to high(Correspondence[i]) do begin
      obj := SearchForTagID(Correspondence[i,j], Sender);
      if (obj <> nil) and (obj is TComponent) then
        if TComponent(Obj).Tag = Correspondence[i,j] then
          // make sure search was successful
          VoidCaption(obj);
    end;
end;

现在代码更具可重复性。