7.5 for语句

前面编写的循环有几个共同之处:都先初始化一个变量,都有一个依赖于这个变量的条件,且都在循环体内修改这个变量。这种循环很常见,为了以更简洁的方式表示,Java 提供了另一条语句——for 循环。

例如,我们可以将 printTable 重写为下面这样:

  1. public static void printTable(int rows) {
  2. for (int i = 1; i <= rows; i = i + 1) {
  3. printRow(i, rows);
  4. }
  5. }

for 循环在括号内包含 3 个由分号分隔的部分:初始化部分、条件部分和更新部分。

(1) 初始化部分只在循环开始时运行一次。

(2) 每次循环前都检查条件部分,如果它为 false,循环将终止;否则就再次执行循环。

(3) 每次迭代结束时,都运行更新部分再返回到第 2 步。

通常来说,for 循环更容易理解,因为它将所有与循环相关的语句都放在了循环开头。

while 循环和 for 循环的一个不同之处在于:若在初始化部分声明了变量,那么该变量只在 for 循环中可用。例如,下面是一个使用 for 循环的 printRow 版本:

  1. public static void printRow(int n, int cols) {
  2. for (int i = 1; i <= cols; i = i + 1) {
  3. System.out.printf("%4d", n * i);
  4. }
  5. System.out.println(i); // 编译错误
  6. }

最后一行试图显示 i(这样做只是为了演示),但行不通。要想在循环外使用循环变量,就必须在循环外声明它,如下所示:

  1. public static void printRow(int n, int cols) {
  2. int i;
  3. for (i = 1; i <= cols; i = i + 1) {
  4. System.out.printf("%4d", n * i);
  5. }
  6. System.out.println(i);
  7. }

for 循环中,很少用 i = i + 1 这样的赋值语句,因为 Java 提供了表示加 1 和减 1 的更简洁方式。具体地说,++ 是递增(increment)运算符,与 i = i + 1 等效;而 --递减(decrement)运算符,与 i = i - 1 等效。

如果给变量加上或减去的值不是 1,而是其他值,可用运算符 +=-=。例如,i += 2 表示将变量 i2