注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gb.qin

A Man's心靈的港灣

 
 
 

日志

 
 

Delphi中for、while 使用注意事项(集)  

2010-01-07 09:31:56|  分类: Delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

循环查找并删除指定条件元素:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  StrList: TStringList;
  J: Integer;

procedure DeleteByWhile;
var
  I: Integer;
begin
  I := 0;
  while I<StrList.Count do
  begin
    Writeln(Format('While Loop I=%d StrList.Count=%d', [I, StrList.Count]));

    if StrList[I] = '3' then
    begin
      StrList.Delete(I);
    end;

    I := I+1;
  end;
end;

procedure DeleteByFor;
var
  I: Integer;
begin
  for I := 0 to StrList.Count - 1 do
  begin
    Writeln(Format('For Loop I=%d StrList.Count=%d', [I, StrList.Count]));

    if StrList[I] = '3' then
    begin
      StrList.Delete(I);
    end;
  end;
end;

begin
  try
    StrList := TStringList.Create;
    try
      for J := 0 to 10 - 1 do
        StrList.Add(IntToStr(J));

      //DeleteByWhile;
      DeleteByFor;
    finally
      StrList.Free;
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;

  Sleep(300000);
end.

调用DeleterByFor运行结果:
For Loop I=0 StrList.Count=10
For Loop I=1 StrList.Count=10
For Loop I=2 StrList.Count=10
For Loop I=3 StrList.Count=10
For Loop I=4 StrList.Count=9
For Loop I=5 StrList.Count=9
For Loop I=6 StrList.Count=9
For Loop I=7 StrList.Count=9
For Loop I=8 StrList.Count=9
For Loop I=9 StrList.Count=9
EStringListError: List index out of bounds (9)

调用DeleteByWhile运行结果:
While Loop I=0 StrList.Count=10
While Loop I=1 StrList.Count=10
While Loop I=2 StrList.Count=10
While Loop I=3 StrList.Count=10
While Loop I=4 StrList.Count=9
While Loop I=5 StrList.Count=9
While Loop I=6 StrList.Count=9
While Loop I=7 StrList.Count=9
While Loop I=8 StrList.Count=9


从上面的实例可以看出,for循环中循环最小和最大值是在一开始就确定了,在程序运行过程中不会因为其他因素的影响而改变;而while循环是每次都进行条件比较,而且是动态的读取参数的值。

 

如果将DeleteByFor函数改成:

procedure DeleteByFor;
var
  I: Integer;
begin
  for I := StrList.Count - 1 downto 0 do
  begin
    Writeln(Format('For Loop I=%d StrList.Count=%d', [I, StrList.Count]));

    if StrList[I] = '3' then
    begin
      StrList.Delete(I);
    end;
  end;
end;
则运行结果:
For Loop I=9 StrList.Count=10
For Loop I=8 StrList.Count=10
For Loop I=7 StrList.Count=10
For Loop I=6 StrList.Count=10
For Loop I=5 StrList.Count=10
For Loop I=4 StrList.Count=10
For Loop I=3 StrList.Count=10
For Loop I=2 StrList.Count=9
For Loop I=1 StrList.Count=9
For Loop I=0 StrList.Count=9

从上面的结果可以总结出,当我们要循环查找并且删除指定条件的元素时,一定要用while或者由大到小的for循环。否则会引起不必要的错误!

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/missmecn/archive/2008/10/06/3021261.aspx

  评论这张
 
阅读(942)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017