大多数while循环语句都具有以下常规结构:
initialization
while (Booleanexpression)
{
statement
update control variable
}
使用for语句,可以写出以上结构的一个更正规的版本,具体的做法是将initialization(初始化)、Boolean expression(布尔表达式)与updatecontrol variable(更新控制变量)合并到一起。用过for语句之后,就能体会到它的好处,因为它能使我们牢牢记住这三个必要的部分。以下是for语句的语法:
for (initialization; Booleanexpression; updatecontrolvariable)
statement
前面展示过while循环的一个例子,它能显示0~9的整数。现在要用for循环来改写它:
for (int i = 0; i <10; i++)
{
Console.WriteLine(i);
}
初始化(int i = 0)只在循环开始时发生一次。如果布尔表达式(i < 10)的求值结果为true,就运行语句(Console.WriteLine(i);)。随后,控制变量将进行更新(i++),布尔表达式将重新求值,如果仍为true,语句将再次执行,控制变量将进行更新,布尔表达式将重新求值……如此反复。
注意三点:
1) 初始化只发生一次;
2) 循环主体中的语句至少执行一次,才会对控制变量进行更新;
3) 在更新控制变量之前,要先重新求值布尔表达式。
for语句的三个部分都可以省略。如果省略布尔表达式,布尔表达式就默认为true。以下for语句将一直运行:
for (int i = 0; ;i++)
{
Console.WriteLine("谁来阻止我!");
}
如果省略初始化和更新部分,会得到一个看起来怪怪的while循环:
int i = 0;
for (; i <10; )
{
Console.WriteLine(i);
i++;
}
注意 for语句的初始化、布尔表达式和更新控制变量这三个部分必须用分号分隔,即使某个部分的实际内容并不存在。
如有必要,可在一个for循环中提供多个初始化语句和多个更新语句(但布尔表达式只能有一个)。为此,请用逗号分隔不同的初始化和更新语句,如下例所示:
for (int i = 0, j = 10; i <= j; i++, j--)
{
...
}
作为最后一个例子,我们用for循环来重写前一个练习中的while循环:
for (string line = reader.ReadLine(); line != null; line= reader.ReadLine())
{
source.Text += line + ‘\n’;
}
提示:作为一个良好的编程习惯,应该用一对{}来显式定义if,while和for语句的主体,即使其中只包含一个语句。采用代码块的形式,以后可以更加方便地在块中添加语句。假如事先不是代码块,那么在添加另一个语句时,就必须记住同时添加语句和大括号。但是,大括号很容易被遗忘?
5.3.1 理解for语句的作用域前面说过,可以在for语句的“初始化”部分声明一个新变量。该变量的作用域限制在for语句的主体中。一旦for语句结束,变量就会消失。这个规则造成了两个非常重要的结果。首先,不能在for语句结束之后使用那个变量,因为它已经不在作用域中。下面是一个例子:
for (int i = 0; i <10; i++)
{
...
}
Console.WriteLine(i); // 编译时错误
其次,可以接连写两个或者更多的for语句,并在其中使用相同的变量名,因为每个变量都在一个不同的作用域中。下面是一个例子:
for (int i = 0; i < 10; i++)
{
...
}
for (int i = 0; i <20; i += 2) // okay
{
...
}
{鱊0購*N顣槝(u 軴c漁V? yr'`h?y0N