目录
有时,某些指令需要重复执行。循环是一种理想的方法。循环表示必须重复的一组指令。在循环的上下文中,重复被称为迭代 。
下图说明了循环的分类
迭代次数是确定/固定的循环称为确定循环 。
循环 | 描述 |
---|---|
for 循环 | for循环是一个明确的循环的实现 for循环执行代码块指定的次数 它可用于迭代一组固定的值,例如数组 |
for ... in 循环 | for … in循环用于循环对象的属性 |
当循环中的迭代次数不确定或未知时,将使用不定循环。可以使用以下方式实现确定循环:
循环 | 描述 |
---|---|
while 循环 | 每次指定的条件求值为true时,while循环都会执行指令 换句话说,循环在执行代码块之前评估条件 |
do…while 循环 | do … while循环类似于while循环 只是do … while循环不会在第一次循环执行时评估条件 |
Dart的 循环控制语句:
循环 | 描述 |
---|---|
break 语句 | break语句用来作为控制了结构的 在循环中使用break会导致程序退出循环 |
continue 语句 | continue语句跳过当前迭代的后续语句 并采取控制回到循环的开始 |
for
循环
for循环是一个明确的循环的实现。for循环执行代码块指定的次数。它可用于迭代一组固定的值,例如数组。
以下是 for 循环的语法。
for (initial_count_value; termination-condition; step) {
//statements
}
例如
var num = 5;
var factorial = 1;
for( var i = num ; i >= 1; i-- ) {
print("${(factorial)} * ${(i)} = ${(factorial *= i)}");
}
输出
1 * 5 = 5
5 * 4 = 20
20 * 3 = 60
60 * 2 = 120
120 * 1 = 120
for
循环有三个部分:初始化(i = num
),所述条件(i> = 1
)和最终个表达式(i--
)。
程序计算数字5的阶乘并显示相同的阶乘。for循环生成从5到1的数字序列,计算每次迭代中数字的乘积。
通过使用逗号运算符,
可以在for循环中组合多个赋值和最终表达式。
例如
for(var temp, i = 0, j = 1; j<30; temp = i, i = j, j = i + temp) {
print('temp-${(temp)}; i-${(i)},j-${(j)}');
}
输出
temp-null; i-0,j-1
temp-0; i-1,j-1
temp-1; i-1,j-2
temp-1; i-2,j-3
temp-2; i-3,j-5
temp-3; i-5,j-8
temp-5; i-8,j-13
temp-8; i-13,j-21
for...in
循环
for ... in
循环用于循环对象的属性。
以下是for ... in
循环的语法。
for (variablename in object){
statement or block to execute
}
在每次迭代中,来自对象的一个属性被分配给变量名称,并且此循环继续,直到对象的所有属性都用完为止。
例如:
var obj = [12,13,14];
for (var prop in obj) {
print(prop);
}
输出结果:
12
13
14
while
循环
while 循环执行指令指定的每个条件计算为真时。换句话说,循环在执行代码块之前评估条件。
下图显示了 while 循环的流程图
以下是 while 循环的语法。
while (expression) {
Statement(s) to be executed if expression is true
}
例如
var num = 5;
var factorial = 1;
while(num >=1) {
print("before - num:${(num)}, factorial:${(factorial)}");
factorial = factorial * num;
num--;
print("after - num:${(num)}, factorial:${(factorial)}");
}
输出结果:
before - num:5, factorial:1
after - num:4, factorial:5
before - num:4, factorial:5
after - num:3, factorial:20
before - num:3, factorial:20
after - num:2, factorial:60
before - num:2, factorial:60
after - num:1, factorial:120
before - num:1, factorial:120
after - num:0, factorial:120
do...while
循环
do ... while
循环类似于while循环,只是do ... while
循环不会在第一次循环执行时评估条件。但是,将对后续迭代评估条件。换句话说,代码块将在do ... while
循环中至少执行一次。
以下是
do-while
循环的语法。
do {
Statement(s) to be executed;
} while (expression);
例如
var n = 0;
do {
print(n);
n--;
} while(n>0);
输出结果
0
break
语句
该 break
语句用来作为控制了结构的。在循环中使用 break
会导致程序退出循环。以下是 break 语句的示例。
var i = 1;
while(i<=10) {
print(i);
if (i % 5 == 0) {
print("The first multiple of 5 between 1 and 10 is : ${(i)}");
break ;
//exit the loop if the first multiple is found
}
i++;
}
上面的代码打印出1到10之间的数字范围的5的第一个倍数。
如果发现一个数字可被5整除,则if结构强制控件使用break语句退出循环。成功执行上述代码后,将显示以下 输出 。
1
2
3
4
5
The first multiple of 5 between 1 and 10 is : 5
continue
语句
在 continue
语句跳过当前迭代的后续语句,并采取控制回到循环的开始。与 break
语句不同, continue
语句不会退出循环。它终止当前迭代并开始后续迭代。
var num = 0;
var count = 0;
for(num = 0;num<=20;num++) {
if (num % 2==0) {
continue;
}
print(num);
count++;
}
输出结果:
1
3
5
7
9
11
13
15
17
19
使用标签来控制程序流程
标签是只是一个标识符,后跟一个冒号(:)被加到一个语句或代码块。标签可以与break
和continue
一起使用,更精确地控制流量。
continue
或break
语句与其标签名称之间不允许换行符。此外,标签名称和关联循环之间不应该有任何其他语句。
带 break
的标签
outerloop: // This is the label name
for (var i = 0; i < 5; i++) {
print("Outerloop-i: ${(i)}");
innerloop:
for (var j = 0; j < 5; j++) {
if (j > 3 ) break ;
// Quit the innermost loop
if (i == 2) break innerloop;
// Do the same thing
if (i == 4) break outerloop;
// Quit the outer loop
print("Innerloop-j: ${(j)}");
}
}
输出结果:
Outerloop-i: 0
Innerloop-j: 0
Innerloop-j: 1
Innerloop-j: 2
Innerloop-j: 3
Outerloop-i: 1
Innerloop-j: 0
Innerloop-j: 1
Innerloop-j: 2
Innerloop-j: 3
Outerloop-i: 2
Outerloop-i: 3
Innerloop-j: 0
Innerloop-j: 1
Innerloop-j: 2
Innerloop-j: 3
Outerloop-i: 4
带 continue
的标签
outerloop: // This is the label name
for (var i = 0; i < 3; i++) {
print("Outerloop - i: ${(i)}");
for (var j = 0; j < 5; j++) {
if (j == 3){
continue outerloop;
}
print("Innerloop - j: ${(j)}");
}
}
Innerloop - j: 0
Innerloop - j: 1
Innerloop - j: 2
Outerloop - i: 1
Innerloop - j: 0
Innerloop - j: 1
Innerloop - j: 2
Outerloop - i: 2
Innerloop - j: 0
Innerloop - j: 1
Innerloop - j: 2