程序流程的控制之循环(Delphi)

循环式编程语言中给一个共同的元素,它可以用来重复执行某个动作,知道某个特定的条件。

所有循环都有以下的元素:

  • 起点

  • 主体

  • 结束点

  • 循环结束的条件

  • 辅助的Break和Continue过程

循环的开始点是Object Pascal循环语句之一(forwhilerepeat),每次循环迭代时,主体包含的语句都要执行一次,主体包含任何有效的Object Pascal代码,它可以是单行代码,也可以使多行代码。若主体包含的是多行代码,其代码必须用beginend语句分块(只有repeat循环例外)。循环的结束点要么是关键字end(在for循环和while循环情况下),要么是关键字until(在repeat循环情况下)。当一个循环主体是单行代码时,就不需要用关键字beginend

大部分循环都是这样操作的:进入循环并检验条件,若检验结果为False,则执行循环主体,当程序执行到循环体底部时,它将跳回循环顶部,并再一次检验条件,如果检验结果仍然是False,则重复整个以上过程,若检验结果是True,则程序将立刻跳到紧跟在循环代码块后面的代码行。(这些描述对于repeat循环是个例外,它是在循环底部检验条件,而不是在循环顶部。)

Caution

偶尔很容易把循环检验条件写成永远的False,其结果就会使程序锁死或者挂起,不停地循环,这种情况下只能在Windows任务管理器里面来终止该进程。

Tip

在Delphi中,可用工具栏中的Run按钮或者按F9来运行一个程序,若要杀死一个在IDE中运行的程序,可在主菜单上选择Run | Program Reset或者按Ctrl + F2

在Delphi中可以使用for to/down to dowhile…dorepeat…until三种方式来实现循环控制。

var
  I: Integer;
  X: Integer;
begin
  X := 10;
  for I := 0 to 9 do       { I从0递增变化到9,依次执行10次DoSomething}
  begin
    { DoSomething}
  end;

  for I := 0 to Pred(X) do { Pred(X)返回X的前一个值,即9}
  begin
    { DoSomething}
  end;

  for I := 9  downto 0 do  { I从9递减变化到0,依次执行10次DoSomething}
  begin
    { DoSomething}
  end;

  X := 8;                  { I从9递减到0,循环10次}
  for I := Succ(X) downto 0 do
  begin                    { Succ函数返回指定值的后一个}
    { DoSomething}
  end;

  I := 0;
  while I <= 10 do  { 和for I := 0 to 10 do的功能是一样的}
  begin
    ShowMessage(IntToStr(I));
    Inc(I);         { while的特点就是可以自己控制循环因子}
  end;

  I := 0;
  repeat            { 和while I <= 10 do 功能相同}
    ShowMessage(IntToStr(I));
    Inc(I);
  until I = 10;

  I := 0;   { Inc以指定的值递增,Dec以指定的值递减}
  Inc(I);   { I = 1}
  Inc(I, 2);{ I = 3}
  Dec(I, 2);{ I = 1}
  Dec(I);   { I = 0}
  ShowMessage(IntToStr(I));
end;

Caution

使用for方式要注意,循环变量的步长是固定为1的,不能再循环体中用代码进行修改。

while的特点就是可以自行控制循环变量的变化,灵活性比for更大。

repeat是从while演化过来的。while首先要判断条件是否成立再执行,而repeat是首先执行,再判断条件是否成立。

Note

上面代码中对于I变量名的使用起源于FORTRAN语言,而这也是for循环的习惯用法。

Continue和Break过程

Continue过程,用来强制程序执行到循环底部并进入一个循环,而跳过Continue后面的所有语句。如果位于try…finally块中则会先执行finally..end块再进入下一个循环。

var
  I:Integer;
begin
  for I := 0 to 2 do
  begin
    try
      if I < 1 then
        Continue;
      ShowMessage(IntToStr(I));
    finally
      ShowMessage('finally..end');
    end;
  end;
end;

运行结果依次如下(图示中0,1,2分别代表循环变量I变化时的显示结果):

0027

Break过程,用来循环正常结束之前终止循环。如果位于try…finally块中,则finally…end块也会得到执行,例如下面代码:

var
  I:Integer;
begin
  for I := 0 to 2 do
  begin
    try
      if I > 1 then
        Break;
      ShowMessage(IntToStr(I));
    finally
      ShowMessage('finally..end');
    end;
  end;
end;

运行结果依次如下(图示中0,1,2分别代表循环变量I变化时的显示结果):

0028

Continue和Break只能用在for、while和repeat循环中,如果在循环外部用这两个过程将会产生编译器错误。

以上代码均在Delphi7中测试通过。

原文地址:https://www.cnblogs.com/pchmonster/p/2291085.html