2.7 循环语句
循环,就是指反复执行同一个动作。在C#中,用于循环的结构有:
● while循环
● do循环
● for循环
● foreach循环
■2.7.1 while循环
while的语法结构与if语句非常类似,不同的是,if后面的语句块只执行一次,而while后的语句块反复执行,直至while括号内条件不成立。
1 public void while循环() 2 { 3 int i = 10; 4 while (i > 0) 5 { 6 result += i + "\n"; 7 i--; 8 } 9 }
上述代码中,i的初值为10,判断i是否大于0,如果条件成立不断地往result中追加i,并且i自减1。因此result最后返回的结果是:10 9 8…3 2 1,因为i为1时,仍然输出,但是自减之后,i变为0, while后的条件不再成立,跳出循环。
具有同样功能的VBA代码如下:
1 Public Sub while循环() 2 Dim i As Integer 3 i = 10 4 While (i > 0) 5 result = result & i & vbNewLine 6 i = i -1 7 Wend 8 End Sub
■2.7.2 do循环
与while循环相比,do循环首先执行一次其后的语句块,然后判断条件是否成立,如果成立则继续执行语句块,如果不成立,则退出do…while循环。
1 public void do循环() 2 { //至少执行一次循环体内容 3 int i = 10; 4 do 5 { 6 result += i + "\n"; 7 i--; 8 } 9 while (i > 0); 10 }
上述代码i初值为10,首先往result后面追加10,然后自减1,然后判断i是否大于0;如果大于0,则继续执行do后的语句块;如果不大于0,则退出循环。
因此,上述代码result最终显示10,9,8, …,3,2,1这10个数字。
具有同样功能的VBA代码如下:
1 Public Sub do循环() 2 '至少执行一次循环体内容 3 Dim i As Integer 4 i = 10 5 Do 6 result = result & i & vbNewLine 7 i = i -1 8 Loop While (i > 0) 9 End Sub
■2.7.3 for循环
如果要使用固定次数的循环,则该考虑使用for循环。for循环圆括号内分三个部分,依次是初值设定、条件判断和处理。
1 public void for循环() 2 { 3 for (int i = 1; i < 5; i++) 4 { 5 result += i + "\n"; 6 } 7 }
上述代码中,for循环体内声明一个整型变量i,判断如果i小于5,则执行for循环体的语句块部分,接着自加1,继续判断是否小于5,如此反复执行,直至i不小于5。因此上述代码result最终结果为:1 2 3 4。
注意 for循环体内三个部分是用半角分号隔开,而不是逗号。
具有同样功能的VBA代码如下:
1 Public Sub for循环() 2 For i = 1 To 4 Step 1 3 result = result & i & vbNewLine 4 Next i 5 End Sub
下面再举一个典型的循环实例加深印象:累加从1到100之间所有的偶数之和。
1 public void TestFor() 2 { 3 int total = 0; 4 for (int i = 2; i <= 100; i += 2) 5 { 6 total += i; 7 } 8 MessageBox.Show("偶数和为:" + total); 9 }
上述代码中,total的初值为0,循环变量i从2到100,步长为2,每循环一次,就把i累加给total,对话框显示“偶数和为2550”。
■2.7.4 foreach循环
foreach循环用于枚举集合类对象中的各个元素,例如列举字符串中的每个字符、数组中的每一个元素等。
1 public void foreach循环() 2 { 3 int[] arr = { 1, 3, 5, 7 }; 4 foreach (int i in arr) 5 { 6 result += i + "\n"; 7 } 8 }
上述代码中,arr是一个整型数组,foreach循环体内使用变量i代表数组中的每一个元素。
具有同样功能的VBA代码如下:
1 Public Sub foreach循环() 2 Dim arr As Variant, v 3 arr = Array(1, 3, 5, 7) 4 For Each v In arr 5 result = result & v & vbNewLine 6 Next v 7 End Sub