当前位置: 首页 > news >正文

Java For 循环全解析:从基础到增强的实战指南

Java For 循环全解析:从基础到增强的实战指南

一、For 循环:Java 流程控制的核心组件

虽然所有循环结构都可以用 while 或者 do…while表示,但 Java 提供了另一种语句——for循环,使一些循环结构变得更加简单。
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。For 循环具有以下特性:

  • 确定循环次数的首选
  • 支持复杂的循环控制逻辑
  • 配合增强语法简化集合遍历

本文将整合课程内容,深度解析 For 循环的底层原理与实践技巧。

二、传统 For 循环详解

1. 基础语法

for循环执行的次数是在执行前就确定的。

for (初始化; 条件; 更新) {
    // 循环体
}

2. 执行流程

初始化 → 条件判断 → 执行循环体 → 更新 → 条件判断 → ...

最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
再次检测布尔表达式。循环执行上面的过程。

3. 示例代码

package struct;

public class ForDemo01 {
    public static void main(String[] args) {
        int a =1;//初始化条件
        while(a <= 100){//条件判断
            System.out.println(a);///循环体
            a += 2;//迭代
        }
        System.out.println("while循环结束");

        //初始化//条件判断//迭代
        for (int i = 1;i <= 100;i++){
            System.out.println(i);
        }
        System.out.println("for循环结束");
    }
}

注意事项

  • 初始化、条件、更新均可省略,但分号不可省略
  • 无限循环写法:for (;;) { ... }

三、随堂练习

1. 练习1:计算0到100之间的奇数和偶数的和

package struct;

public class ForDemo02 {
    public static void main(String[] args) {
        int oddsum = 0;
        int evensum = 0;
        for (int i = 0; i <= 100; i++) {
            if (i % 2 != 0) {
                oddsum += i;
            }else {
                evensum += i;
            }
        }
        System.out.println("奇数的和=" + oddsum);
        System.out.println("偶数的和=" + evensum);
    }
}

2. 练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个

package struct;

public class ForDemo03 {
    public static void main(String[] args) {
        //练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
        for (int i = 1; i <= 1000; i++) {
            if (i % 5 == 0) {
                System.out.print(i+"\t");
            }
            if (i % (5*3) == 0) {
                System.out.println();//System.out.print("\n")
            }
        }
        /*
        println:输出完会换行
        print:输出玩不会换行
         */
    }
}

3.练习3:打印九九乘法表

package struct;

public class ForDemo04 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i+"*"+j+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}

四、增强 For 循环

这里我们先只是见一面,做个了解,之后数组我们重点使用。

Java5 引入了一种主要用于数组或集合的增强型for循环。

1. 语法格式

for (元素类型 变量 : 集合/数组) {
    // 操作变量
}
for(声明语句 : 表达式){
    //代码语句
}
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

2. 适用场景

// 遍历数组
int[] nums = {1, 2, 3};
for (int num : nums) {
    System.out.println(num);
}

// 遍历集合
List<String> names = Arrays.asList("张三", "李四");
for (String name : names) {
    System.out.println(name);
}

局限性

  • 无法获取当前索引
  • 遍历过程中不能修改集合(会抛出ConcurrentModificationException

五、For 循环对比与选择策略

1. 传统 For vs 增强 For

维度传统 For 循环增强 For 循环
适用场景需要索引或复杂控制简单遍历
性能稍高(直接索引访问)稍低(迭代器实现)
可读性适合复杂逻辑代码简洁

2. 循环结构选择矩阵

场景推荐结构示例代码
确定次数的循环For 循环for (int i=0; i<10; i++)
遍历集合 / 数组增强 For 循环for (String s : list)
不确定次数的循环While 循环while (condition)
至少执行一次的循环Do-While 循环do { … } while (condition)

六、常见错误与解决方案

1. 无限循环

错误示例

for (int i = 0; i < 10; ) { // 缺少i++导致无限循环⚠️
    System.out.println(i);
}

解决方案

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

2. 索引越界

错误示例

int[] arr = {1, 2, 3};
for (int i = 0; i <= arr.length; i++) { // 应为i < arr.length⚠️
    System.out.println(arr[i]);
}

3. 并发修改异常

错误示例

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
for (int num : list) {
    if (num == 2) {
        list.remove(num); // 抛出ConcurrentModificationException⚠️
    }
}

解决方案

Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    int num = iterator.next();
    if (num == 2) {
        iterator.remove();
    }
}

七、最佳实践总结

  1. 优先使用增强 For 循环

    // 推荐做法
    for (User user : userList) {
        process(user);
    }
    
  2. 避免多层嵌套

    // 反模式
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) { ... }
    }
    
    // 推荐做法
    for (int i = 0; i < 10; i++) {
        processRow(i);
    }
    
  3. 明确循环变量作用域

    // 推荐做法
    for (int i = 0; i < 10; i++) { // 作用域仅限于循环
        System.out.println(i);
    }
    

八、高频面试题解析

1. For 循环的初始化可以省略吗?

  • 可以省略,但需确保条件和更新部分正确

  • 示例:

    int i = 0;
    for (; i < 10; i++) { ... }
    

2. 增强 For 循环的底层实现?

  • 基于Iterator接口实现

  • 反编译代码示例:

    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        String element = iterator.next();
        // 循环体
    }
    

九、学习资源推荐

  1. Java For 循环官方文档
  2. 狂神说 Java 课程
  3. 阿里巴巴 Java 开发手册

十、总结与互动

通过本文的学习,您将掌握:

  • 传统 For 循环的三种核心用法
  • 嵌套循环的优化技巧
  • 增强 For 循环的适用场景
  • 循环结构的选择策略

疑问引导:您在使用 For 循环时遇到过哪些难以解决的问题?例如:

  • 嵌套循环导致的性能问题?
  • 并发修改异常的排查?
    欢迎在评论区分享您的解决方案!

相关文章:

  • Spring Boot项目中策略模式的应用与实现
  • 教程:如何使用 JSON 合并脚本
  • AutoDev Next:IDE 即 AI 编程服务,构建多端粪围编程
  • 接口自动化学习三:参数化parameterize
  • 多品种金融数据高效导入丨DolphinDB 希施玛历史数据自动化导入模块介绍
  • 【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解
  • JVM深入原理(一+二):JVM概述和JVM功能
  • 《解锁Qwen2.5-Omni:AI全模态大模型部署实战指南》
  • 企业出海如何选择全球化软件工具?Websoft9 推荐开源作为理性可行的选择
  • 写给新人的深度学习扫盲贴:向量与矩阵
  • DayDreamer: World Models forPhysical Robot Learning
  • 基于图扑 HT 技术的电缆厂 3D 可视化管控系统深度解析
  • 第3期 基于改进YOLOv8的卫星下的船舰检测算法与系统实现
  • STM32平衡车开发实战教程:从零基础到项目精通
  • 顺序容器 -forward list单链表
  • YOLO系列
  • 嵌入式电量与功耗优化:从理论到实战
  • Linux:环境变量
  • LLaMA-Factory大模型微调全流程指南
  • 【rabbitmq基础】
  • 做海报的网站知乎/百度竞价推广方案的制定
  • 建站设计网站/google搜索关键词
  • 德州哪个做网站做得好/推广公司运营模式
  • 廊坊做网站优化的公司/百度搜索指数和资讯指数
  • 程序员做任务的网站/广州线下培训机构停课
  • 记录网站建设的基本步骤/外贸网站外链平台