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

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

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

  • Java循环结构全解析:从基础用法到性能优化(含经典案例)
    • 一、循环结构的核心作用与分类
      • 1. 核心作用
      • 2. 分类
    • 二、四大循环结构的基础语法与经典案例
      • 1. for循环:已知次数的精准循环
        • 语法结构
        • 经典案例1:打印直角三角形(嵌套for循环)
        • 运行结果
        • 经典案例2:生成乘法口诀表(双层for循环)
        • 运行结果
      • 2. while循环:未知次数的条件循环
        • 语法结构
        • 实例:用户输入验证(未知输入次数)
      • 3. do-while循环:至少执行一次的循环
        • 语法结构
        • 实例:菜单交互(必须显示一次菜单)
      • 4. 增强型for循环(for-each):简洁的集合遍历
        • 语法结构
        • 实例:遍历数组与集合
    • 三、循环结构的核心差异与选择指南
      • 1. 核心差异对比
      • 2. 选择指南
    • 四、循环中的关键操作:break、continue、return
      • 1. break:终止当前循环
      • 2. continue:跳过本次循环
    • 五、循环性能优化技巧
    • 六、常见循环错误与避坑指南
    • 七、总结

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

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

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

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

1. 核心作用

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

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

2. 分类

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

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

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

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

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

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

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),且列数不超过行数(避免重复计算)。

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循环:未知次数的条件循环

语法结构
初始化表达式;
while (循环条件表达式) {// 循环体迭代表达式;
}
实例:用户输入验证(未知输入次数)
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循环:至少执行一次的循环

语法结构
初始化表达式;
do {// 循环体迭代表达式;
} while (循环条件表达式);
实例:菜单交互(必须显示一次菜单)
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):简洁的集合遍历

语法结构
for (元素类型 变量名 : 可迭代对象) {// 循环体:变量名直接引用集合中的元素
}
实例:遍历数组与集合
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行:

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行不打印:

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

http://www.dtcms.com/a/520604.html

相关文章:

  • C 位域:核心地带,引领技术前沿
  • 鹤壁专业做网站公司前端培训心得
  • python-87-Pyinstaller打包在没有安装Python的电脑上运行
  • 海北高端网站建设多少钱网站后台登陆密码破解
  • CrewAI 核心概念(Knowledge)篇
  • 预检查和表单提交
  • [MySQL] 数据库设计
  • 数据处理像搭乐高?详解 RAGFlow Ingestion Pipeline
  • 模仿网站属于侵权吗做网站视频是什么专业
  • 汽车转向控制 / 线控转向介绍——控制技术——智能驾驶专栏
  • 基于KSP密钥管理系统的汽车 ECU JTAG 调试接口动态授权与安全管控
  • 世界经理人网站手机版学生网页网站制作软件大全
  • 企业网站带新闻发布功能的建站wordpress文章显示颜色
  • SpringBoot-Web开发之Web原生组件注入
  • Spring Cloud - Spring Cloud 本地配置(本地配置概述、本地配置实现)
  • 青岛商城网站建设长春建设平台网站的公司
  • 这几年做网站怎么样wordpress adsense主题
  • 做视频网站服务器怎么选择12306网站开发时间
  • 如何做家教网站赚钱如何申请国外网站
  • 淄博做网站建设云南网站建设方案
  • 实用指南--多账号矩阵防封控
  • 前端框架Vue(Vue 的挂载点与 data 数据对象)
  • pycharm 远程连接服务器添加github copilot
  • 金融智能体的技术底座解析:AI Agent如何实现“认知+执行”闭环?
  • PostgreSQL 选择数据库:深入解析与最佳实践
  • 木材模板.网站黄山网站建设推广
  • 临沧永德网站建设电子商务公司个人博客网站制作论文
  • MOshell (13) :运维自动化与参数一致性管理
  • CS224N-Lecture01-Word Vectors
  • vscode 配置ROS项目 导入库来源