Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸
3.5.1 循环示例
为了探讨循环的更多细节,让我们看一个实际的小例子。LoopsTest
程序突显了具有固定计数器和开放计数器的循环之间的差异。第一个固定计数器循环,一个for
循环,按顺序显示数字:
var
I: Integer;
begin
for I := 1 to 20 do
Show('Number ' + IntToStr(I));
end;
也可以使用while
循环获得相同的效果,内部增量为1(注意,在使用当前值后再递增值)。但是,使用while
循环,您可以自由设置自定义增量,例如2:
var
I: Integer;
begin
I := 1;
while I < = 20 do
begin
Show('Number ' + IntToStr(I));
Inc(I, 2)
end;
end;
这段代码显示了从1到19的所有奇数。
这些具有固定增量的循环执行预定的次数,在逻辑上也是等效的。但情况并非总是如此。有些循环在执行上更不确定,例如需要取决于外部条件。 注意:编写while
循环时,您必须始终考虑条件永远不会满足的情况。例如,如果编写上面的循环但忘记递增循环计数器,这将导致无限循环(这将永远停滞程序,很可能消耗CPU的100%,直到用户或操作系统终止进程)。
为了展示一个不确定循环次数的例子,我编写了一个基于计数器的while
循环,但增加是随机的。为了实现这一点,我使用了范围值为100的Random
函数调用。此函数的结果是0到99之间的随机选择的数字。这系列随机数字控制了while
循环执行的次数:
var
I: Integer;
begin
Randomize;
I := 1;
while I < 500 do
begin
Show('Random Number: ' + IntToStr(I));
I := I + Random(100);
end;
end;
如果你记得添加对Randomize
过程的调用,那么每次运行程序时该过程使随机数生成器从不同点开始,每次运行程序时数字都会不同。以下是两次单独执行的输出,并排显示:
Random Number: 1 Random Number: 1
Random Number: 40 Random Number: 47
Random Number: 60 Random Number: 104
Random Number: 89 Random Number: 201
Random Number: 146 Random Number: 223
Random Number: 198 Random Number: 258
Random Number: 223 Random Number: 322
Random Number: 251 Random Number: 349
Random Number: 263 Random Number: 444
Random Number: 303 Random Number: 466
Random Number: 349
Random Number: 366
Random Number: 443
Random Number: 489
请注意,生成的数字不仅在每次运行时不同,而且条目数量也不同。这是因为while
循环执行的次数是随机的。如果连续执行该程序多次,您将看到输出的行数不同。