有时可能存在需要执行代码块多次的情况。循环语句允许我们执行一个语句或语句组多次,下面是循环语句的一般形式:
碰到状况(condition)进行判断,情况为true
,跑 Conditional Code; 情况为false
,跳过 Conditional Code。
以下有几种类型:
只要条件为true
,重复执行目标语句(statement)。
while(condition)
{
statement(s);
}
statement(s) 可能是单个语句或语句块,condition 可以是任何的情况。
当条件为true
时,一直执行 statement,直到条件为false
为止。
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
跟 while 相比,较可以控制循环次数。
for ( init; condition; increment )
{
statement(s);
}
init
,这个步骤可以声明或初始化任何循环变量,也可以不把声明放这里,只要一个分号出现。true
,执行 statement。若为false
,直接离开循环。true
,重复过程;若为false
,循环终止。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循环 先执行目标语句(statement),再跑条件。这使得 do ... while循环保证至少执行一次。
do
{
statement(s);
}while( condition );
条件句在循环结束後,所以 statement 至少可以执行一次。
如果条件为true
,控制流会循环执行 statement,直到条件为false
。
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
,循环立即终止。如果正在使用嵌套循环(循环内还有循环),break
将停止执行最深层的循环。
break;
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语句的工作原理有点像 break语句,差别在於break
是强制终止整个循环,continue
是强制终止当前循环,但还在循环内。
continue;
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;
}
如果有错误,欢迎留言指教~ Q_Q useReducer 看起来跟 Redux 的 reducer...
这个得上一篇:https://ithelp.ithome.com.tw/articles/10261...
写在前面 placeholder for d11 placeholder for d11 place...
在踏入ML领域的第一步,也是最核心的关键,就是决定命题。 那麽会想解决什麽样的问题呢? 若要在工作上...
实作了商品细节页之後就要把商品加进购物车啦,今天会把要买的东西存进 Laravel 的 Sessio...