Day 04 - 循环(Loops)

有时可能存在需要执行代码块多次的情况。循环语句允许我们执行一个语句或语句组多次,下面是循环语句的一般形式:
Untitled
碰到状况(condition)进行判断,情况为true,跑 Conditional Code; 情况为false,跳过 Conditional Code。

以下有几种类型:

# while循环

只要条件为true,重复执行目标语句(statement)。

语法:

while(condition)
{
   statement(s);
}

statement(s) 可能是单个语句或语句块,condition 可以是任何的情况。
当条件为true时,一直执行 statement,直到条件为false为止。

流程图:

Untitled

ex.

int main() {
    
    // 一开始的年龄为 10
    int age = 10;
    
    while (age < 20) {
        
        NSLog(@"value of age: %d",age);
        
        age++; //age = age + 1
    }
    
    return 0;
}

结果:

2021-09-13 01:43:26.071385+0800 TestOC[98218:2703900] value of age: 10
2021-09-13 01:43:26.074459+0800 TestOC[98218:2703900] value of age: 11
2021-09-13 01:43:26.074598+0800 TestOC[98218:2703900] value of age: 12
2021-09-13 01:43:26.074709+0800 TestOC[98218:2703900] value of age: 13
2021-09-13 01:43:26.074848+0800 TestOC[98218:2703900] value of age: 14
2021-09-13 01:43:26.074956+0800 TestOC[98218:2703900] value of age: 15
2021-09-13 01:43:26.075059+0800 TestOC[98218:2703900] value of age: 16
2021-09-13 01:43:26.075151+0800 TestOC[98218:2703900] value of age: 17
2021-09-13 01:43:26.075238+0800 TestOC[98218:2703900] value of age: 18
2021-09-13 01:43:26.075315+0800 TestOC[98218:2703900] value of age: 19

# for循环

跟 while 相比,较可以控制循环次数。

语法:

for ( init; condition; increment )
{
   statement(s);
}
  1. 一开始先执行init,这个步骤可以声明或初始化任何循环变量,也可以不把声明放这里,只要一个分号出现。
  2. 条件进行判断,如果为true,执行 statement。若为false,直接离开循环。
  3. 主要的循环执行後,控制流跳到 increment 语句,该语句允许更新任何循环控制变量。这语句可以留空,只要一个分号出现。
  4. 再次判断条件,如果为true,重复过程;若为false,循环终止。

流程图:

Untitled

ex.

#import <Foundation/Foundation.h>

int main() {
    
    // 一开始的年龄为 10
    int age;
    
    for (age = 10; age < 20; age++) {
        NSLog(@"value of age: %d",age);

    }
    
    return 0;
}

结果:

2021-09-13 08:26:46.041283+0800 TestOC[98565:2723233] value of age: 10
2021-09-13 08:26:46.041812+0800 TestOC[98565:2723233] value of age: 11
2021-09-13 08:26:46.041891+0800 TestOC[98565:2723233] value of age: 12
2021-09-13 08:26:46.041971+0800 TestOC[98565:2723233] value of age: 13
2021-09-13 08:26:46.042048+0800 TestOC[98565:2723233] value of age: 14
2021-09-13 08:26:46.042123+0800 TestOC[98565:2723233] value of age: 15
2021-09-13 08:26:46.042202+0800 TestOC[98565:2723233] value of age: 16
2021-09-13 08:26:46.042890+0800 TestOC[98565:2723233] value of age: 17
2021-09-13 08:26:46.043247+0800 TestOC[98565:2723233] value of age: 18
2021-09-13 08:26:46.043450+0800 TestOC[98565:2723233] value of age: 19

# do...while循环

与前两者不同的地方在於,do...while循环 先执行目标语句(statement),再跑条件。这使得 do ... while循环保证至少执行一次。

语法:

do
{
   statement(s);

}while( condition );

条件句在循环结束後,所以 statement 至少可以执行一次。
如果条件为true,控制流会循环执行 statement,直到条件为false

流程图:

Untitled

ex.

#import <Foundation/Foundation.h>

int main() {
    
    // 一开始的年龄为 10
    int age = 10;
    
    do {
        NSLog(@"value of age: %d",age);

        age ++;
        
    } while (age < 20);
    
    return 0;
}

结果:

2021-09-13 10:25:54.404092+0800 TestOC[99161:2767015] value of age: 10
2021-09-13 10:25:54.404767+0800 TestOC[99161:2767015] value of age: 11
2021-09-13 10:25:54.404909+0800 TestOC[99161:2767015] value of age: 12
2021-09-13 10:25:54.405042+0800 TestOC[99161:2767015] value of age: 13
2021-09-13 10:25:54.405207+0800 TestOC[99161:2767015] value of age: 14
2021-09-13 10:25:54.405303+0800 TestOC[99161:2767015] value of age: 15
2021-09-13 10:25:54.405408+0800 TestOC[99161:2767015] value of age: 16
2021-09-13 10:25:54.405508+0800 TestOC[99161:2767015] value of age: 17
2021-09-13 10:25:54.405619+0800 TestOC[99161:2767015] value of age: 18
2021-09-13 10:25:54.405706+0800 TestOC[99161:2767015] value of age: 19

# break语句

有两种用法:

  1. 循环语句:当遇到break,循环立即终止。
  2. 可以用来终止switch语句的case情况(之後会提到)

如果正在使用嵌套循环(循环内还有循环),break将停止执行最深层的循环。

用法:

break;

流程图:

Untitled

ex.

#import <Foundation/Foundation.h>

int main() {
    
    // 一开始的年龄为 10
    int age = 10;
    
    while (age < 20) {
        
        NSLog(@"value of age: %d",age);

        age ++;
        
        if (age > 15) {
            break;
        }
        
    }
    
    return 0;
}

age > 15就会结束这循环。

结果:

2021-09-13 11:00:35.905066+0800 TestOC[99396:2786775] value of age: 10
2021-09-13 11:00:35.908529+0800 TestOC[99396:2786775] value of age: 11
2021-09-13 11:00:35.908625+0800 TestOC[99396:2786775] value of age: 12
2021-09-13 11:00:35.908711+0800 TestOC[99396:2786775] value of age: 13
2021-09-13 11:00:35.908797+0800 TestOC[99396:2786775] value of age: 14
2021-09-13 11:00:35.908871+0800 TestOC[99396:2786775] value of age: 15

# continue语句

continue语句的工作原理有点像 break语句,差别在於break强制终止整个循环continue强制终止当前循环,但还在循环内。

用法:

continue;

流程图:

Untitled

ex.

#import <Foundation/Foundation.h>

int main() {
    
    // 一开始的年龄为 10
    int age = 10;
    
    do {
        age ++;
        
        if (age == 15) {
            
            NSLog(@"Hello, world");
            continue;
        }
        
        NSLog(@"value of age: %d",age);
        
    } while (age < 20);
    
    return 0;
}

结果:

2021-09-15 17:17:21.479747+0800 TestOC[81114:955281] value of age: 11
2021-09-15 17:17:21.480617+0800 TestOC[81114:955281] value of age: 12
2021-09-15 17:17:21.480724+0800 TestOC[81114:955281] value of age: 13
2021-09-15 17:17:21.480826+0800 TestOC[81114:955281] value of age: 14
2021-09-15 17:17:21.480923+0800 TestOC[81114:955281] Hello, world
2021-09-15 17:17:21.481009+0800 TestOC[81114:955281] value of age: 16
2021-09-15 17:17:21.481085+0800 TestOC[81114:955281] value of age: 17
2021-09-15 17:17:21.481182+0800 TestOC[81114:955281] value of age: 18
2021-09-15 17:17:21.481303+0800 TestOC[81114:955281] value of age: 19
2021-09-15 17:17:21.481643+0800 TestOC[81114:955281] value of age: 20

value of age: 15被跳过了。


# 无限循环

只要不给条件,这个判断旧永远不会是 false,这个循环也就不会结束,变成了无限循环。

#import <Foundation/Foundation.h>

int main() {
    
    for ( ; ; ) {
        NSLog(@"This loop will run forever.");

    }
    
    return 0;
}

<<:  Day 03 - Contract

>>:  【Day 18】jQuery DOM

Day 16 - 用 useReducer 取代 Redux !?

如果有错误,欢迎留言指教~ Q_Q useReducer 看起来跟 Redux 的 reducer...

第57天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10261...

[D19] placeholder for d11

写在前面 placeholder for d11 placeholder for d11 place...

ML是一种方法 | ML#Day3

在踏入ML领域的第一步,也是最核心的关键,就是决定命题。 那麽会想解决什麽样的问题呢? 若要在工作上...

Day 24 | Livewire 实作 购物网站(三): 加入购物车

实作了商品细节页之後就要把商品加进购物车啦,今天会把要买的东西存进 Laravel 的 Sessio...