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

本文详细介绍了ObjectPascal中的三种循环结构:for、while和repeat...until,包括它们的使用方法、特点及注意事项。同时,文章还提供了丰富的代码示例帮助理解。

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

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

  • 起点

  • 主体

  • 结束点

  • 循环结束的条件

  • 辅助的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三种方式来实现循环控制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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块再进入下一个循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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块也会得到执行,例如下面代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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中测试通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值