Java循环结构全解析:从基础用法到性能优化(含经典案例)

Java循环结构全解析:从基础用法到性能优化(含经典案例)

本文收录于《 零基础入门Java·基础篇 学习大纲

Java循环结构全解析:从基础用法到性能优化(含经典案例)

在Java编程中,循环结构是实现重复执行代码块的核心技术,也是处理批量数据、迭代逻辑的基础。无论是简单的次数循环、条件循环,还是集合迭代,掌握不同循环结构的适用场景和优化技巧,能显著提升代码的效率和可读性。本文将结合直角三角形打印乘法口诀表生成等经典案例,全面拆解Java中的循环结构。

一、循环结构的核心作用与分类

1. 核心作用

循环结构的本质是重复执行一段代码块,直到满足终止条件。其核心价值在于:

  • 减少重复代码(如批量处理1000条数据无需写1000行重复逻辑);
  • 处理不确定次数的逻辑(如用户输入验证,直到输入合法才继续);
  • 迭代数据集合(如遍历数组、集合中的元素)。

2. 分类

Java提供4种常用循环结构,适用于不同场景:

循环类型 核心特点 适用场景
for循环 初始化、循环条件、迭代器分离,结构清晰 已知循环次数(如遍历数组、固定次数循环)
while循环 先判断条件再执行,条件不满足则一次不执行 未知循环次数(如依赖外部状态的循环)
do-while循环 先执行一次再判断条件,至少执行一次 必须执行一次的场景(如菜单交互、输入验证)
增强型for循环 语法简洁,无需索引,直接遍历元素 遍历数组、集合(Collection),无需操作索引

二、四大循环结构的基础语法与经典案例

1. for循环:已知次数的精准循环

语法结构
java 复制代码
for (初始化表达式; 循环条件表达式; 迭代表达式) {
    // 循环体:需要重复执行的代码
}
经典案例1:打印直角三角形(嵌套for循环)

直角三角形的打印需要控制每行的星号数量随行数递增,适合用嵌套for循环实现(外层控制行数,内层控制每行的星号数)。

java 复制代码
public class RightTriangle {
    public static void main(String[] args) {
        int rows = 5; // 三角形的行数
        // 外层循环:控制行数(从1到rows)
        for (int i = 1; i <= rows; i++) {
            // 内层循环:控制每行的星号数量(第i行打印i个星号)
            for (int j = 1; j <= i; j++) {
                System.out.print("* ");
            }
            // 每行结束后换行
            System.out.println();
        }
    }
}
运行结果
复制代码
* 
* * 
* * * 
* * * * 
* * * * * 
经典案例2:生成乘法口诀表(双层for循环)

乘法口诀表是典型的行列关联场景,外层循环控制行数(乘数1),内层循环控制列数(乘数2),且列数不超过行数(避免重复计算)。

java 复制代码
public class MultiplicationTable {
    public static void main(String[] args) {
        // 外层循环:控制行数(乘数i从1到9)
        for (int i = 1; i <= 9; i++) {
            // 内层循环:控制列数(乘数j从1到i,避免重复)
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "×" + i + "=" + (j*i) + "\t");
            }
            // 每行结束后换行
            System.out.println();
        }
    }
}
运行结果
复制代码
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81	

2. while循环:未知次数的条件循环

语法结构
java 复制代码
初始化表达式;
while (循环条件表达式) {
    // 循环体
    迭代表达式;
}
实例:用户输入验证(未知输入次数)
java 复制代码
import java.util.Scanner;

public class WhileLoopDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int password;
        // 循环直到输入正确的密码(123456)
        while (true) {
            System.out.print("请输入密码:");
            password = scanner.nextInt();
            if (password == 123456) {
                System.out.println("密码正确,登录成功!");
                break; // 满足条件,退出循环
            } else {
                System.out.println("密码错误,请重新输入!");
            }
        }
        scanner.close();
    }
}

3. do-while循环:至少执行一次的循环

语法结构
java 复制代码
初始化表达式;
do {
    // 循环体
    迭代表达式;
} while (循环条件表达式);
实例:菜单交互(必须显示一次菜单)
java 复制代码
import java.util.Scanner;

public class DoWhileLoopDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int choice;
        do {
            // 显示菜单(至少显示一次)
            System.out.println("\n===== 功能菜单 =====");
            System.out.println("1. 打印直角三角形");
            System.out.println("2. 生成乘法口诀表");
            System.out.println("3. 退出");
            System.out.print("请选择功能(1-3):");
            choice = scanner.nextInt();
            
            // 根据选择执行对应功能
            switch (choice) {
                case 1:
                    printTriangle(5); // 调用直角三角形打印方法
                    break;
                case 2:
                    printMultiplicationTable(); // 调用乘法口诀表方法
                    break;
                case 3:
                    System.out.println("退出系统,再见!");
                    break;
                default:
                    System.out.println("输入错误,请重新选择!");
            }
        } while (choice != 3); // 选择3则退出循环
        scanner.close();
    }
    
    // 封装直角三角形打印方法
    private static void printTriangle(int rows) {
        for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }
    
    // 封装乘法口诀表方法
    private static void printMultiplicationTable() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "×" + i + "=" + (j*i) + "\t");
            }
            System.out.println();
        }
    }
}

4. 增强型for循环(for-each):简洁的集合遍历

语法结构
java 复制代码
for (元素类型 变量名 : 可迭代对象) {
    // 循环体:变量名直接引用集合中的元素
}
实例:遍历数组与集合
java 复制代码
import java.util.ArrayList;
import java.util.List;

public class ForEachDemo {
    public static void main(String[] args) {
        // 遍历数组
        int[] nums = {1, 3, 5, 7, 9};
        System.out.println("数组元素:");
        for (int num : nums) {
            System.out.print(num + " ");
        }
        
        // 遍历集合
        List<String> fruits = new ArrayList<>();
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");
        System.out.println("\n水果列表:");
        for (String fruit : fruits) {
            System.out.print(fruit + " ");
        }
    }
}

三、循环结构的核心差异与选择指南

1. 核心差异对比

对比维度 for循环 while循环 do-while循环 增强型for循环
执行顺序 先判断,后执行 先判断,后执行 先执行,后判断 先迭代,后执行
循环次数确定性 已知次数(推荐) 未知次数(推荐) 至少执行一次(推荐) 遍历集合/数组(推荐)
典型案例 直角三角形、乘法表 用户输入验证 菜单交互 数组/集合遍历

2. 选择指南

  • 若明确知道循环次数(如打印5行三角形、9行乘法表)→ 用for循环;
  • 若循环次数依赖外部条件(如用户输入密码的次数)→ 用while循环;
  • 若必须执行一次循环体(如显示菜单后再判断是否退出)→ 用do-while循环;
  • 若仅需遍历集合/数组,无需操作索引 → 用增强型for循环(代码更简洁)。

四、循环中的关键操作:break、continue、return

1. break:终止当前循环

例如在乘法口诀表中,若只想打印前5行:

java 复制代码
for (int i = 1; i <= 9; i++) {
    if (i > 5) break; // 行数超过5则终止循环
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "×" + i + "=" + (j*i) + "\t");
    }
    System.out.println();
}

2. continue:跳过本次循环

例如在直角三角形中,第3行不打印:

java 复制代码
int rows = 5;
for (int i = 1; i <= rows; i++) {
    if (i == 3) continue; // 跳过第3行
    for (int j = 1; j <= i; j++) {
        System.out.print("* ");
    }
    System.out.println();
}

五、循环性能优化技巧

  1. 避免循环内创建对象 :将对象创建移到循环外(如StringBuilder复用);
  2. 减少循环内的计算量 :缓存集合长度(如int size = list.size());
  3. 优化嵌套循环 :乘法口诀表中通过j <= i减少内层循环次数,避免冗余计算;
  4. 利用并行流 :大数据量循环时,用parallelStream()利用多核CPU加速。

六、常见循环错误与避坑指南

  1. 死循环 :确保循环条件最终会变为false(如乘法表中i从1增至9后退出);
  2. 索引越界 :数组遍历用i < array.length而非i <= array.length
  3. 增强型for循环修改集合:遍历集合时添加/删除元素会报错,需用迭代器。

七、总结

循环结构是Java编程的基础,通过本文的直角三角形、乘法口诀表等案例可以看出:

  • for循环适合控制固定次数的嵌套逻辑(如行列关联的图形或表格);
  • whiledo-while适合依赖外部条件的场景(如交互逻辑);
  • 增强型for循环简化了集合遍历的代码;
  • 合理使用breakcontinue能让循环逻辑更清晰。

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/153798540

相关推荐
chxin140163 小时前
优化算法——动手学深度学习11
pytorch·python·深度学习
漫漫不慢.3 小时前
蓝桥杯-16955 岁月流转
java·jvm·蓝桥杯
JanelSirry3 小时前
如何查看java死锁?具体怎么做,怎么避免
java·开发语言
yinghuaqipao3 小时前
面向对象——设计模式(创建型)
android·java·设计模式
Jing_jing_X3 小时前
Spring 自动注入是怎么实现的?从 @Component 到 @Autowired 的完整流程
java·后端·spring
小龙报3 小时前
《算法通关指南之C++编程篇(5)----- 条件判断与循环(下)》
c语言·开发语言·c++·算法·visualstudio·学习方法·visual studio
god003 小时前
chromium项目中添加源文件(BUILD.gn项目中添加源文件)
java·服务器·前端
郝学胜-神的一滴3 小时前
C++ STL(标准模板库)深度解析:从基础到实践
linux·服务器·开发语言·c++·算法
LL_break4 小时前
线程3 JavaEE(阻塞队列,线程池)
java·开发语言·java-ee·线程·线程池·阻塞队列