[objective-C基础]循环
程序 (program) 中的循环 (loop) 就是在特定程序区块 (block) 中,重复执行相同的工作

Objective-C 中有三种循环,一种是 while 循环 (while loop) ,一种是 for 循环 (for loop) ,最后一种是 do-while 循环 (do-while loop) , while 与 for 两种循环属于前测试循环,可以互相替代,端视自己喜欢用哪一种啰!至于 do-while 循环属于后测试循环。
我们先来看看 while 循环的写法
- int i = 10 // 设置控制变量
- while (i > 0) {
- // 循环工作区
- System.out.println(i);
- i--; // 调整控制变量值
- }
这个循环所进行的工作很简单,先在命令列上印出 10 ,然后一路倒数到 1 为止。循环有三个地方要注意
1、设置控制变量
2、条件
3、调整控制变量值
while 循环的控制变量 (control variable) 必须在 while 之前就先设置好,此例中将控制变量 i 设置为 10 。然后进入 while 的地方,条件 (condition) 就在 while 之后的小括弧中,此例中为当控制变量 i 大于 0 时,循环便会重复执行。循环工作区,也就是 while 底下用大括弧围住的程序区块,这里,我们只有简单的印出控制变量 i 的值,循环工作区的最后需要有调整控制变量值的地方。
我们先写成完整的范例,来编译 (compile) 看看结果吧!
- // 示范 while 循环
- #import <Foundation/Foundation.h>
- int main (int argc, const char * argv[]) {
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- NSString *output = @"\n\n";
- [output autorelease];
- int i = 10; // 设置控制变量
- while (i > 0) {
- // 循环工作区
- output = [output stringByAppendingFormat: @"%i\n", i];
- i--; // 调整控制变量值
- }
- output = [output stringByAppendingString: @"\n\n"];
- NSLog(output);
- [pool drain];
- return 0;
- }
编译执行结果如下:

当我们明确知道重复次数的时候,我们得利用控制变量来记录 while 循环所进行次数,这样 while 循环才会有结束的一天,不然若是三个与控制变量相关的部份,漏了任一部份时,就有可能导致无穷循环 (infinite loop) 的发生,例如
- int i = 10 // 设置控制变量
- while (i > 0) {
- // 循环工作区
- output = [output stringByAppendingFormat: @"%i\n", i];
- // 没有调整控制变量值
- }
这样一来,控制变量 i 永远大于 0 ,所以循环会一直重复执行,此例中会不断的在命令打印出 10 ,直到强制结束程序的执行为止。
注意:以上的 while 循环是介绍有明确重复次数的用法,若是循环没有明确重复次数,那就得另行设计结束循环的方式,例如控制变量等于某一个值之时,再利用 break 跳出循环。
另外一个 for 循环则是把控制变量的设置、循环结束条件、控制变量的调整全都写在小括号之中,如下
- for (int i = 10; i > 0; i--) {
- output = [output stringByAppendingFormat: @"%i\n", i];
- }
for 之后的小括弧用两个分号区隔三个项目,依序是控制变量的设置、循环结束条件、控制变量的调整。这个 for 循环与上面的 while 循环功能完全相同,写成完整的范例程序,如下
- // 示范 for 循环
- #import <Foundation/Foundation.h>
- int main (int argc, const char * argv[]) {
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- NSString *output = @"\n\n";
- [output autorelease];
- for (int i = 10; i > 0; i--) {
- output = [output stringByAppendingFormat: @"%i\n", i];
- }
- output = [output stringByAppendingString: @"\n\n"];
- NSLog(output);
- [pool drain];
- return 0;
- }
执行结果会与 while 的例子相同。
小括中的两个分号与条件是必须的,因此如果写成
- int i = 1;
- for (; i > 0;) {
- output = [output stringByAppendingFormat: @"%i\n", i];
- }
这会使 for 循环变成一个无穷循环。
习惯上, for 循环通常用于具有明确重复次数的循环,因为全部的控制机制都放在 for 之后的小括弧中, while 循环用于没有明确重复次数的循环,例如接收用户输入的循环,当用户输入结束指令的时候,循环才会结束,不然程序会一直等待用户的输入。
但是提醒一点, for 循环可以用 while 循环替代,反之亦然,自己偏好哪一种也就可以用哪一种啰!
do-while 循环把结束条件放在最后,其余跟 while 循环相同,也就是说,进入 do-while 循环是先做第一次,然后才进行条件测试,如下
- int i = 10 // 设置控制变量
- do {
- // 循环工作区
- output = [output stringByAppendingFormat: @"%i\n", i];
- i--;
- } while (i > 0);
虽然大多数的 do-while 也能够用 while 替代,还是有些情况用后测试循环来写会比较方便。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
