Java基础全套教程(三)—— 控制语句、方法、递归算法
Java基础全套教程三—— 控制语句、方法、递归算法本章是Java编程从基础语法走向逻辑编程的核心转折点。前面我们学习了变量、数据类型、运算符只能实现简单的顺序执行代码。而真正的程序需要具备判断能力、重复执行能力、代码复用能力。所有软件、系统、项目的底层逻辑全部由三种流程结构 方法封装 递归思想构成。学好本章才算真正具备写逻辑代码的能力是入门编程的核心门槛。3.1 程序三大执行流程Java程序的执行顺序只有三种结构所有复杂逻辑都是这三种结构的组合嵌套3.1.1 顺序结构代码默认执行方式从上往下、逐行执行、无跳转、无重复。简单的赋值、打印、运算都属于顺序结构。3.1.2 选择结构分支结构根据条件真假选择性执行部分代码。核心思想满足条件才执行不满足则跳过或走其他分支。用于处理判断、筛选、状态区分场景。3.1.3 循环结构满足条件时重复执行一段代码直到条件不成立为止。用于批量处理、重复运算、遍历数据等场景。3.2 选择结构详解if / switch3.2.1 if 单分支结构语法规则仅在条件为 true 时执行代码块条件为 false 直接跳过。if(布尔表达式){// 条件成立才执行}开发强制规范无论语句块只有一行还是多行必须加大括号不加大括号仅对下一行生效极易产生隐藏bug。全新示例随机幸运数字判断程序随机生成一个1~10的数字判断是否为幸运数字7、8、9为幸运publicclassLuckyNumTest{publicstaticvoidmain(String[]args){// 生成1~10随机整数intnum(int)(Math.random()*10)1;if(num7){System.out.println(本次随机数num恭喜今日幸运数字);}if(num7){System.out.println(本次随机数num平常心下次更好);}}}3.2.2 if-else 双分支结构语法逻辑二选一执行条件成立执行前者不成立执行后者必然执行其中一块。if(布尔表达式){// 成立执行}else{// 不成立执行}全新示例体重标准判断随机生成体重数值判断是否属于标准体重范围publicclassWeightJudgeTest{publicstaticvoidmain(String[]args){// 随机生成40~80kg体重doubleweight40Math.random()*40;System.out.println(当前体重String.format(%.1f,weight)kg);// 假设60-70为标准体重if(weight60weight70){System.out.println(体重达标身材标准);}else{System.out.println(体重不在标准范围记得合理运动);}}}拓展三元运算符替代双分支publicclassTernaryTest{publicstaticvoidmain(String[]args){intscore176;intscore289;// 获取两个分数中的较高值intmaxScorescore1score2?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(score90){System.out.println(评级优秀A);}elseif(score80){System.out.println(评级良好A);}elseif(score70){System.out.println(评级中等B);}elseif(score60){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){intweek3;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(星期参数错误);}}}全新示例2String字符串匹配JDK7publicclassSwitchStringTest{publicstaticvoidmain(String[]args){Stringfruitapple;switch(fruit){caseapple:System.out.println(苹果富含维生素);break;casebanana:System.out.println(香蕉补充能量);break;caseorange:System.out.println(橙子润肺解渴);break;default:System.out.println(未知水果);}}}3.3 循环结构详解3.3.1 while 循环先判断、后执行条件不成立则一次都不执行适合未知循环次数场景。全新示例计算1~100偶数总和publicclassWhileEvenSumTest{publicstaticvoidmain(String[]args){inti1;intevenSum0;while(i100){if(i%20){evenSumi;}i;}System.out.println(1~100偶数总和evenSum);}}3.3.2 do-while 循环先执行、后判断至少执行一次适合人机交互、输入校验场景。全新示例模拟签到打卡至少提示一次publicclassDoWhileSignTest{publicstaticvoidmain(String[]args){intcount1;do{System.out.println(今日第count次打卡成功);count;}while(count3);}}3.3.3 for 循环开发首选结构紧凑、变量作用域可控适合已知循环次数场景。全新示例输出1~100所有能被4整除的数publicclassForFourTest{publicstaticvoidmain(String[]args){System.out.println(1~100能被4整除的数);for(inti1;i100;i){if(i%40){System.out.print(i );}}}}3.3.4 嵌套循环外层控行、内层控列用于打印图形、批量双层遍历。全新示例打印6行6列星号矩阵publicclassNestMatrixTest{publicstaticvoidmain(String[]args){for(inti0;i6;i){for(intj0;j6;j){System.out.print(* );}System.out.println();}}}全新九九乘法表排版优化版publicclassMultiTableTest{publicstaticvoidmain(String[]args){for(introw1;row9;row){for(intcol1;colrow;col){System.out.printf(%d*%d%-2d ,col,row,row*col);}System.out.println();}}}3.3.5 break 与 continuebreak终止当前整个循环continue跳过本次直接进入下一次循环全新break示例寻找第一个能被7整除的数publicclassBreakSevenTest{publicstaticvoidmain(String[]args){for(inti10;i50;i){if(i%70){System.out.println(找到目标数i);break;}}}}全新continue示例跳过偶数只输出奇数publicclassContinueOddTest{publicstaticvoidmain(String[]args){for(inti1;i30;i){if(i%20){continue;}System.out.print(i );}}}3.4 方法代码复用核心方法是具备独立功能的代码块可以重复调用解决代码冗余、杂乱问题是面向对象的基础。3.4.1 方法语法格式修饰符 返回值类型 方法名(形参列表){方法体return返回值;}3.4.2 基础方法示例全新案例定义方法实现「计算两数乘积」和「打印欢迎语」publicclassMethodBaseTest{publicstaticvoidmain(String[]args){// 调用方法printWelcome();intresgetMultiply(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){returnab;}publicstaticintsum(inta,intb,intc){returnabc;}publicstaticdoublesum(doublea,doubleb){returnab;}}重载误区总结仅返回值不同、仅参数名不同都不构成重载。3.4.4 实战方法案例考勤罚款系统全新逻辑publicclassAttendFineTest{publicstaticvoidmain(String[]args){doublefinecalcFine(25,8000);System.out.println(本次迟到罚款fine元);}publicstaticdoublecalcFine(intlateMin,doublemonthSalary){doublefineMoney0;doubledaySalarymonthSalary/21.75;if(lateMin5){System.out.println(轻微迟到口头警告);}elseif(lateMin15){fineMoney50;}elseif(lateMin30){fineMoney150;}elseif(lateMin60){fineMoneydaySalary/2;}else{fineMoneydaySalary*2;}returnfineMoney;}}3.5 递归算法递归核心方法自己调用自己适合拆解重复性子问题常用于数学运算、遍历、搜索算法。递归必备两点递归头终止条件、递归体递推逻辑全新示例递归计算累加 1~npublicclassRecursionSumTest{publicstaticvoidmain(String[]args){intresultgetTotal(50);System.out.println(1~50累加结果result);}publicstaticintgetTotal(intn){// 递归头if(n1){return1;}// 递归体returnngetTotal(n-1);}}递归优缺点代码简洁优雅但会占用栈内存层数过多容易栈溢出复杂场景优先循环。本章核心知识点总结程序三大结构顺序、选择、循环覆盖所有编程逻辑if 适合区间判断switch 适合固定值匹配注意 case 穿透问题while先判后执行、do-while至少执行一次、for循环为开发首选break结束整体循环continue跳过本次循环方法实现代码复用重载提升方法兼容性递归核心是自己调用自己必须设置终止条件慎用深层递归。