3.7.2 for循环
递增和递减运算符经常在for循环中使用。与while循环相似,for循环反复执行一个代码块,直到满足一个指定的条件。区别在于,for循环有一套内建的语法规定了如何初始化、递增以及测试一个计数器的值。
代码清单3-42展示了如何使用for循环以二进制形式显示一个整数。输出3-21展示了这个代码清单的结果。
代码清单3-42 使用for循环
public class BinaryConverter System.Console.Write ("Enter an integer: ");// Set initial mask to 100.... |
输出3-21
Enter an integer: -42 |
在代码清单3-42中,我们将一个位掩码应用于由用户输入的数的每一位,总共要应用64次。for循环声明并初始化变量count,要求每一次循环都递增count,并指定当count到达64的时候结束循环。for循环中的每个表达式都对应一个语句。正因为如此,对不同表达式进行分隔的是分号而不是逗号。
for循环的常规形式如下:
for(initial; boolean-expression; loop) |
下面对for循环的各个部分进行了解释:
initial表达式执行第一次循环之前的操作。在代码清单3-42中,它声明并初始化count变量。initial表达式不一定非要声明一个新变量。例如,可以在之前声明好变量,在for循环中只是初始化它。然而,在这里声明的变量只具有for语句的作用域。
for循环的boolean-expression(布尔表达式)部分指定了循环结束条件。一旦该条件为false,就会终止循环,这和while循环是相似的。只要布尔表达式求值为true,for循环就会一直重复。在上例中,循环会在count递增到64的时候退出。
loop表达式会在每次循环之后执行。在上例中,count++会在mask右移位(mask >>= 1)之后,但在布尔表达式求值之前执行。第64次循环的时候,count会递增到64,造成boolean-expression变成false,因而终止循环。由于每个表达式都可以视为一个单独的语句,因此for循环中的每个表达式都以分号分隔。
for循环的statement部分是在条件表达式保持为true的时候执行的代码。
在代码清单3-42中,for循环的执行步骤可以用以下伪代码来表示。
(1) 声明并将count初始化为0。
(2) 验证count小于64。
(3) 计算bit并显示它。
(4) 对mask执行右移位处理。
(5) count递增1。
(6) 如果count<64,就返回步骤3。
for语句的圆括号内允许省略任何元素。for(;;){ ... }是完全有效的,只要你有办法从循环中退出。类似地,initial和loop表达式可以是由多个子表达式构成的一个复杂表达式,如代码清单3-43所示。
代码清单3-43 使用多个表达式的for循环
for(int x=0, y=5; ((x<=5) && (y>=0)); y--, x++) |
代码清单3-43的结果如输出3-22所示。
输出3-22
0<5 1<4 2<3 3>2 4>1 5>0 |
在这个例子中,逗号的行为和声明语句中的逗号是完全一样的,用于声明并初始化多个变量。但是,程序员应该避免像这样的复杂表达式,因为它们的可读性比较差。
通常可以将for循环改写成一个while循环,如下所示:
initial; |
初学者主题:选择for和while循环
虽然两种语句可以交换使用,但假如涉及某种形式的计数器,而且在循环初始化的时候就知道循环次数,那么一般使用for循环。相反,假如循环不基于计数器,或者在刚开始的时候无法确定循环次数,那么一般使用while循环。
| 回书目 上一节 下一节 |