(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三種方式來實現循環控制。

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中測試通過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章