for循环
for循环是最常用的循环结构。
for循环语法
基本格式
Java
for (初始化; 条件; 更新) {
// 循环体
}
// 执行流程:
// 1. 初始化(只执行一次)
// 2. 判断条件
// 3. 条件为true:执行循环体,执行更新,回到步骤2
// 4. 条件为false:结束循环
基本示例
Java
// 打印1到5
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
// 输出:1, 2, 3, 4, 5
for循环执行流程
执行顺序
Java
初始化 → 条件判断 → 循环体 → 更新 → 条件判断 → ...
↓
条件为false → 结束循环
执行过程示例
Java
for (int i = 1; i <= 3; i++) {
System.out.println(i);
}
// 执行过程:
// 1. i = 1(初始化)
// 2. i <= 3 ? true → 执行循环体(输出1)
// 3. i++ → i = 2
// 4. i <= 3 ? true → 执行循环体(输出2)
// 5. i++ → i = 3
// 6. i <= 3 ? true → 执行循环体(输出3)
// 7. i++ → i = 4
// 8. i <= 3 ? false → 结束循环
for循环组成部分
初始化部分
Java
// 常见初始化
for (int i = 0; i < 10; i++) { } // 声明并初始化
int j = 0;
for (; j < 10; j++) { } // 使用已有变量,初始化省略
// 多个初始化
for (int i = 0, j = 10; i < j; i++, j--) { }
条件部分
Java
// 常见条件
for (int i = 0; i < 10; i++) { } // i < 10
for (int i = 0; i <= 10; i++) { } // i <= 10
// 无限循环(省略条件)
for (int i = 0; ; i++) {
// 需要break退出
}
更新部分
Java
// 常见更新
for (int i = 0; i < 10; i++) { } // 递增
for (int i = 10; i > 0; i--) { } // 递减
for (int i = 0; i < 10; i += 2) { } // 步长2
// 空更新(需在循环体修改)
for (int i = 0; i < 10; ) {
i++; // 手动更新
}
for循环应用
遍历数组
Java
int[] arr = {1, 2, 3, 4, 5};
// 遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
计数循环
Java
// 累加求和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
// sum = 5050
// 统计个数
int count = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) { // 统计偶数
count++;
}
}
// count = 50
嵌套循环
Java
// 打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + i*j + " ");
}
System.out.println();
}
// 遍历二维数组
int[][] matrix = {{1,2,3}, {4,5,6}};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.println(matrix[i][j]);
}
}
倒序循环
Java
// 从大到小
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
// 倒序遍历数组
int[] arr = {1, 2, 3, 4, 5};
for (int i = arr.length - 1; i >= 0; i--) {
System.out.println(arr[i]);
}
增强for循环(for-each)
for-each语法
Java
for (类型 变量 : 数组或集合) {
// 使用变量
}
// 简化遍历,无需索引
for-each示例
Java
int[] arr = {1, 2, 3, 4, 5};
// for-each遍历
for (int num : arr) {
System.out.println(num);
}
// 遍历集合
List<String> list = Arrays.asList("a", "b", "c");
for (String str : list) {
System.out.println(str);
}
for-each特点
- 简洁语法,无需索引
- 只读遍历,不能修改元素
- 顺序遍历,不能跳过
- 无法获取索引
Java
int[] arr = {1, 2, 3};
// for-each不能修改原数组
for (int num : arr) {
num = num * 2; // 只修改num变量,不影响arr
}
// arr仍是{1, 2, 3}
// 需要修改用普通for
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] * 2;
}
for循环变体
省略初始化
Java
int i = 0;
for (; i < 10; i++) {
System.out.println(i);
}
省略条件(无限循环)
Java
for (int i = 0; ; i++) {
if (i >= 10) break; // 需要break退出
System.out.println(i);
}
省略更新
Java
for (int i = 0; i < 10; ) {
System.out.println(i);
i++; // 循环体中更新
}
全省略(无限循环)
Java
for (;;) {
// 无限循环,需break退出
if (condition) break;
}
循环变量作用域
变量作用域限于循环内
Java
for (int i = 0; i < 10; i++) {
// i只在循环内有效
}
// System.out.println(i); // 错误:i不可访问
// 循环外定义变量
int j;
for (j = 0; j < 10; j++) {
// ...
}
System.out.println(j); // 正确:j为10
for循环控制
break跳出循环
Java
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 跳出循环
}
System.out.println(i);
}
// 输出:1, 2, 3, 4
continue跳过当前
Java
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // 跳过本次,继续下次
}
System.out.println(i);
}
// 输出:1, 2, 4, 5(跳过3)
for循环最佳实践
循环次数明确时用for
Java
// 已知循环次数:用for
for (int i = 0; i < 100; i++) {
// 处理100次
}
// 不确定次数:用while
while (hasMoreData()) {
process();
}
避免在循环内修改循环变量
Java
// 不推荐:循环内修改循环变量
for (int i = 0; i < 10; i++) {
i = 5; // 干扰循环逻辑
}
// 推荐:只依赖更新部分
for (int i = 0; i < 10; i++) {
// 使用i,不修改i
}
使用for-each简化遍历
text
// 只读遍历:for-each简洁
for (String item : list) {
System.out.println(item);
}
// 需要索引或修改:普通for
for (int i = 0; i < list.size(); i++) {
list.set(i, process(list.get(i)));
}
要点总结
- for(初始化; 条件; 更新) {循环体}
- 初始化执行一次,条件每次判断,更新每次执行
- 条件为true继续,false结束
- 循环变量作用域限于循环内
- 索引从0开始:i < length
- 索引从1开始:i <= length
- 增强for循环简化遍历(只读)
- for-each不能修改原数组
- 省略条件为无限循环
- 需要索引用普通for,只读用for-each
- 嵌套for处理多维结构
- break跳出,continue跳过
📝 发现内容有误?点击此处直接编辑