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

Java基础全套教程(三)—— 控制语句、方法、递归算法

Java基础全套教程(三)—— 控制语句、方法、递归算法

本章是Java编程从基础语法走向逻辑编程的核心转折点。前面我们学习了变量、数据类型、运算符,只能实现简单的顺序执行代码。而真正的程序,需要具备判断能力、重复执行能力、代码复用能力。

所有软件、系统、项目的底层逻辑,全部由三种流程结构 + 方法封装 + 递归思想构成。学好本章,才算真正具备写逻辑代码的能力,是入门编程的核心门槛。

3.1 程序三大执行流程

Java程序的执行顺序只有三种结构,所有复杂逻辑都是这三种结构的组合嵌套:

3.1.1 顺序结构

代码默认执行方式:从上往下、逐行执行、无跳转、无重复。简单的赋值、打印、运算都属于顺序结构。

3.1.2 选择结构(分支结构)

根据条件真假,选择性执行部分代码。核心思想:满足条件才执行,不满足则跳过或走其他分支。用于处理判断、筛选、状态区分场景。

3.1.3 循环结构

满足条件时,重复执行一段代码,直到条件不成立为止。用于批量处理、重复运算、遍历数据等场景。


3.2 选择结构详解(if / switch)

3.2.1 if 单分支结构

语法规则:仅在条件为 true 时执行代码块,条件为 false 直接跳过。

if(布尔表达式){// 条件成立才执行}

开发强制规范

  1. 无论语句块只有一行还是多行,必须加大括号

  2. 不加大括号仅对下一行生效,极易产生隐藏bug。

全新示例:随机幸运数字判断

程序随机生成一个1~10的数字,判断是否为幸运数字(7、8、9为幸运)

publicclassLuckyNumTest{publicstaticvoidmain(String[]args){// 生成1~10随机整数intnum=(int)(Math.random()*10)+1;if(num>=7){System.out.println("本次随机数:"+num+",恭喜!今日幸运数字!");}if(num<7){System.out.println("本次随机数:"+num+",平常心,下次更好!");}}}

3.2.2 if-else 双分支结构

语法逻辑:二选一执行,条件成立执行前者,不成立执行后者,必然执行其中一块

if(布尔表达式){// 成立执行}else{// 不成立执行}

全新示例:体重标准判断

随机生成体重数值,判断是否属于标准体重范围

publicclassWeightJudgeTest{publicstaticvoidmain(String[]args){// 随机生成40~80kg体重doubleweight=40+Math.random()*40;System.out.println("当前体重:"+String.format("%.1f",weight)+"kg");// 假设60-70为标准体重if(weight>=60&&weight<=70){System.out.println("体重达标,身材标准!");}else{System.out.println("体重不在标准范围,记得合理运动!");}}}

拓展:三元运算符替代双分支

publicclassTernaryTest{publicstaticvoidmain(String[]args){intscore1=76;intscore2=89;// 获取两个分数中的较高值intmaxScore=score1>score2?score1:score2;System.out.println("最高分:"+maxScore);}}

3.2.3 if-else if-else 多分支结构

用于多区间、多等级判断,从上到下依次匹配,匹配成功立即结束分支,所有条件不匹配则走else默认分支。

全新示例:考试分数等级评定

随机生成0~100分数,按学业等级划分评级

publicclassScoreLevelTest{publicstaticvoidmain(String[]args){intscore=(int)(Math.random()*101);System.out.println("考试分数:"+score);if(score>=90){System.out.println("评级:优秀A+");}elseif(score>=80){System.out.println("评级:良好A");}elseif(score>=70){System.out.println("评级:中等B");}elseif(score>=60){System.out.println("评级:及格C");}else{System.out.println("评级:不及格D,需要补考");}}}

3.2.4 switch 多值匹配结构

switch 适合固定等值匹配,不适合区间判断,执行效率高于if多分支。

支持类型:byte、short、int、char、String、枚举

核心特点:缺少break会发生case穿透

全新示例1:星期日程匹配

publicclassSwitchWeekTest{publicstaticvoidmain(String[]args){intweek=3;switch(week){case1:System.out.println("周一:晨会日,梳理本周计划");break;case2:System.out.println("周二:技术学习日");break;case3:System.out.println("周三:项目实战日");break;case4:System.out.println("周四:代码复盘日");break;case5:System.out.println("周五:总结归档日");break;case6:case7:System.out.println("周末:休息充电");break;default:System.out.println("星期参数错误");}}}

全新示例2:String字符串匹配(JDK7+)

publicclassSwitchStringTest{publicstaticvoidmain(String[]args){Stringfruit="apple";switch(fruit){case"apple":System.out.println("苹果:富含维生素");break;case"banana":System.out.println("香蕉:补充能量");break;case"orange":System.out.println("橙子:润肺解渴");break;default:System.out.println("未知水果");}}}

3.3 循环结构详解

3.3.1 while 循环(先判断、后执行)

条件不成立则一次都不执行,适合未知循环次数场景。

全新示例:计算1~100偶数总和

publicclassWhileEvenSumTest{publicstaticvoidmain(String[]args){inti=1;intevenSum=0;while(i<=100){if(i%2==0){evenSum+=i;}i++;}System.out.println("1~100偶数总和:"+evenSum);}}

3.3.2 do-while 循环(先执行、后判断)

至少执行一次,适合人机交互、输入校验场景。

全新示例:模拟签到打卡(至少提示一次)

publicclassDoWhileSignTest{publicstaticvoidmain(String[]args){intcount=1;do{System.out.println("今日第"+count+"次打卡成功");count++;}while(count<=3);}}

3.3.3 for 循环(开发首选)

结构紧凑、变量作用域可控,适合已知循环次数场景。

全新示例:输出1~100所有能被4整除的数

publicclassForFourTest{publicstaticvoidmain(String[]args){System.out.println("1~100能被4整除的数:");for(inti=1;i<=100;i++){if(i%4==0){System.out.print(i+" ");}}}}

3.3.4 嵌套循环

外层控行、内层控列,用于打印图形、批量双层遍历。

全新示例:打印6行6列星号矩阵

publicclassNestMatrixTest{publicstaticvoidmain(String[]args){for(inti=0;i<6;i++){for(intj=0;j<6;j++){System.out.print("* ");}System.out.println();}}}

全新九九乘法表(排版优化版)

publicclassMultiTableTest{publicstaticvoidmain(String[]args){for(introw=1;row<=9;row++){for(intcol=1;col<=row;col++){System.out.printf("%d*%d=%-2d ",col,row,row*col);}System.out.println();}}}

3.3.5 break 与 continue

break:终止当前整个循环

continue:跳过本次,直接进入下一次循环

全新break示例:寻找第一个能被7整除的数

publicclassBreakSevenTest{publicstaticvoidmain(String[]args){for(inti=10;i<50;i++){if(i%7==0){System.out.println("找到目标数:"+i);break;}}}}

全新continue示例:跳过偶数,只输出奇数

publicclassContinueOddTest{publicstaticvoidmain(String[]args){for(inti=1;i<=30;i++){if(i%2==0){continue;}System.out.print(i+" ");}}}

3.4 方法(代码复用核心)

方法是具备独立功能的代码块,可以重复调用,解决代码冗余、杂乱问题,是面向对象的基础。

3.4.1 方法语法格式

修饰符 返回值类型 方法名(形参列表){方法体return返回值;}

3.4.2 基础方法示例(全新案例)

定义方法实现「计算两数乘积」和「打印欢迎语」

publicclassMethodBaseTest{publicstaticvoidmain(String[]args){// 调用方法printWelcome();intres=getMultiply(9,7);System.out.println("两数乘积结果:"+res);}// 无参无返回值publicstaticvoidprintWelcome(){System.out.println("欢迎使用方法工具类!");}// 有参有返回值publicstaticintgetMultiply(inta,intb){returna*b;}}

3.4.3 方法重载

同一个类中,方法名相同、参数列表不同(个数/类型/顺序),与返回值、参数名无关。

全新重载示例:多类型求和工具

publicclassOverloadTest{publicstaticvoidmain(String[]args){System.out.println("两整数和:"+sum(12,23));System.out.println("三整数和:"+sum(11,22,33));System.out.println("浮点和:"+sum(2.5,3.6));}publicstaticintsum(inta,intb){returna+b;}publicstaticintsum(inta,intb,intc){returna+b+c;}publicstaticdoublesum(doublea,doubleb){returna+b;}}

重载误区总结:仅返回值不同、仅参数名不同,都不构成重载。

3.4.4 实战方法案例:考勤罚款系统(全新逻辑)

publicclassAttendFineTest{publicstaticvoidmain(String[]args){doublefine=calcFine(25,8000);System.out.println("本次迟到罚款:"+fine+"元");}publicstaticdoublecalcFine(intlateMin,doublemonthSalary){doublefineMoney=0;doubledaySalary=monthSalary/21.75;if(lateMin<=5){System.out.println("轻微迟到,口头警告");}elseif(lateMin<=15){fineMoney=50;}elseif(lateMin<=30){fineMoney=150;}elseif(lateMin<60){fineMoney=daySalary/2;}else{fineMoney=daySalary*2;}returnfineMoney;}}

3.5 递归算法

递归核心:方法自己调用自己,适合拆解重复性子问题,常用于数学运算、遍历、搜索算法。

递归必备两点:递归头(终止条件)递归体(递推逻辑)

全新示例:递归计算累加 1~n

publicclassRecursionSumTest{publicstaticvoidmain(String[]args){intresult=getTotal(50);System.out.println("1~50累加结果:"+result);}publicstaticintgetTotal(intn){// 递归头if(n==1){return1;}// 递归体returnn+getTotal(n-1);}}

递归优缺点:代码简洁优雅,但会占用栈内存,层数过多容易栈溢出,复杂场景优先循环。


本章核心知识点总结

  1. 程序三大结构:顺序、选择、循环,覆盖所有编程逻辑;

  2. if 适合区间判断,switch 适合固定值匹配,注意 case 穿透问题;

  3. while先判后执行、do-while至少执行一次、for循环为开发首选;

  4. break结束整体循环,continue跳过本次循环;

  5. 方法实现代码复用,重载提升方法兼容性;

  6. 递归核心是自己调用自己,必须设置终止条件,慎用深层递归。

http://www.jsqmd.com/news/807158/

相关文章:

  • 机箱机柜生产风险如何控制
  • Vibecoding 工具如何一次性生成 Web + iOS + Android 三端 APP?功能架构深度解读
  • 告别答辩PPT噩梦:百考通AI如何帮你高效搞定毕业答辩
  • 射频能量技术:从磁控管到智能固态系统的测量与工程实践
  • 2026年5月商业医保公司推荐:五家产品专业评测夜班族防高额自费压力 - 品牌推荐
  • 基于Helm Chart在Kubernetes中部署docker-mailserver邮件服务器
  • 三步搞定黑苹果配置:OpenCore Configurator完全指南
  • 硬件工程师必读:快节奏项目下的电路保护设计实战指南
  • SoC硬件辅助验证技术解析与应用实践
  • 基于GitHub Actions与静态站点构建个人数字足迹聚合系统
  • 黑莓转型复盘:从硬件崩塌到软件重生的战略启示
  • MySQL | DBeaver Mac版下载、安装与使用指南
  • 锂电池热失控防护:从封装技术到系统级安全设计
  • DLP Pico技术与近眼显示系统设计解析
  • 从电视伴音收音机消亡看数字技术演进与仪器集成化趋势
  • 【行情复盘】2026年5月12日(周二)
  • 芯片可测试性设计(DFT)原理与实践:从扫描链到低功耗测试
  • 车载项目氛围灯功能——音乐律动
  • 活动策划27年:一场手印启动,让我读懂“谨慎”二字
  • 实战解析:如何彻底卸载Windows Defender防病毒软件
  • 一般android闹钟需要的权限
  • 从AI概念到落地:传统AI与生成式AI的技术分野与实战选型
  • 开源提示词库:提升AI协作效率的实战指南与核心设计解析
  • 从基础到智能体:RAG技术演进与实战避坑指南
  • 从厨房打蛋器到EDA项目:设计资产管理的工程化实践
  • 维他动力获5亿Pre-A轮启动人形研发;优必选与日立达成合作人形机器人赋能制造; 前小米高管创业工业通用具身大脑小雨智造获B+轮融资
  • go语言配置编译缓存目录
  • 有机颜料哪个更前沿
  • 2026出海技术观察:云API接口迭代的能力边界与业务增量空间
  • 2026年5月北京家装公司推荐:五家专业评测夜间施工防噪音方案 - 品牌推荐