第14章

Java for循环

掌握for循环的语法结构、执行流程和实际应用

学习目标

for循环基础语法

for循环是Java中最常用的循环结构之一,它提供了一种简洁的方式来重复执行代码块。for循环特别适合在已知循环次数的情况下使用。

for循环的基本语法

语法结构:
for (初始化; 条件判断; 更新) {
    // 循环体
}

初始化部分

示例:
int i = 0  // 声明并初始化循环变量
  • 在循环开始前执行一次
  • 通常用于声明和初始化循环变量
  • 可以声明多个变量,用逗号分隔
  • 也可以为空(但分号不能省略)

条件判断

示例:
i < 10  // 循环继续的条件
  • 每次循环前都会检查
  • 返回true时继续循环
  • 返回false时退出循环
  • 可以为空(表示无限循环)

更新部分

示例:
i++  // 更新循环变量
  • 每次循环体执行后执行
  • 通常用于更新循环变量
  • 可以是任何表达式
  • 也可以为空

for循环执行流程

执行步骤详解

1

初始化

执行初始化表达式,通常是声明和初始化循环变量

2

条件判断

检查循环条件,如果为true则继续,为false则退出

3

执行循环体

执行大括号内的代码块

4

更新变量

执行更新表达式,然后返回步骤2

基础for循环示例:
// 打印数字1到10
for (int i = 1; i <= 10; i++) {
    System.out.println("数字: " + i);
}

// 计算1到100的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
System.out.println("1到100的和: " + sum);

for循环应用实例

数组遍历

遍历数组元素:
int[] numbers = {1, 2, 3, 4, 5};

// 正向遍历
for (int i = 0; i < numbers.length; i++) {
    System.out.println("索引 " + i + ": " + numbers[i]);
}

// 反向遍历
for (int i = numbers.length - 1; i >= 0; i--) {
    System.out.println("索引 " + i + ": " + numbers[i]);
}

字符串处理

字符串字符遍历:
String text = "Hello Java";

// 遍历字符串中的每个字符
for (int i = 0; i < text.length(); i++) {
    char ch = text.charAt(i);
    System.out.println("位置 " + i + ": " + ch);
}

// 统计元音字母数量
int vowelCount = 0;
for (int i = 0; i < text.length(); i++) {
    char ch = Character.toLowerCase(text.charAt(i));
    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
        vowelCount++;
    }
}
System.out.println("元音字母数量: " + vowelCount);

数学计算

阶乘计算:
// 计算n的阶乘
int n = 5;
long factorial = 1;

for (int i = 1; i <= n; i++) {
    factorial *= i;
}
System.out.println(n + "! = " + factorial);

// 计算斐波那契数列
int count = 10;
int a = 0, b = 1;
System.out.print("斐波那契数列: " + a + " " + b + " ");

for (int i = 2; i < count; i++) {
    int next = a + b;
    System.out.print(next + " ");
    a = b;
    b = next;
}

嵌套for循环

嵌套for循环是指在一个for循环内部包含另一个for循环。这种结构常用于处理二维数据、生成图案或进行复杂的数据处理。

性能注意事项

嵌套循环的时间复杂度是各层循环次数的乘积。例如,两层各循环n次的嵌套循环时间复杂度为O(n²),要谨慎使用。

打印图案

打印星号三角形:
// 打印直角三角形
int rows = 5;
for (int i = 1; i <= rows; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print("* ");
    }
    System.out.println(); // 换行
}

// 打印等腰三角形
for (int i = 1; i <= rows; i++) {
    // 打印空格
    for (int j = 1; j <= rows - i; j++) {
        System.out.print(" ");
    }
    // 打印星号
    for (int j = 1; j <= 2 * i - 1; j++) {
        System.out.print("*");
    }
    System.out.println();
}

二维数组处理

二维数组遍历:
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 遍历二维数组
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

// 计算矩阵对角线元素之和
int diagonalSum = 0;
for (int i = 0; i < matrix.length; i++) {
    diagonalSum += matrix[i][i]; // 主对角线
}
System.out.println("对角线元素之和: " + diagonalSum);

九九乘法表

生成九九乘法表:
// 打印九九乘法表
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "×" + i + "=" + (i * j) + "\t");
    }
    System.out.println();
}

完整代码演示

以下是一个综合性的for循环示例程序,展示了各种for循环的使用场景:

💻 查看完整代码 - 在线IDE体验

for循环最佳实践

编程建议与注意事项

推荐做法

  • 使用有意义的循环变量名
  • 避免在循环体内修改循环变量
  • 合理使用break和continue
  • 优先使用for-each循环遍历集合
  • 避免不必要的嵌套循环
  • 在循环外声明不变的变量

避免的做法

  • 在循环条件中调用复杂方法
  • 创建不必要的对象
  • 过度嵌套循环
  • 忽略边界条件检查
  • 在循环体内进行昂贵的操作
  • 使用浮点数作为循环变量

性能优化技巧

优化示例:
// 不推荐:每次循环都计算length
for (int i = 0; i < array.length; i++) {
    // 处理array[i]
}

// 推荐:提前计算length
int length = array.length;
for (int i = 0; i < length; i++) {
    // 处理array[i]
}

// 更推荐:使用for-each循环
for (int element : array) {
    // 处理element
}

章节总结