Java流程控制
Java流程控制
- 一、流程控制就像"道路选择"
- 1. 顺序结构 → 直行路
- 2. 分支结构 → 十字路口
- 3. 循环结构 → 绕圈跑步
- 二、重点记忆技巧
- 1. 分支结构对比
- 2. 循环结构对比
- 3. 控制跳转
- 三、常见错误避坑指南
- 1.switch忘记写break
- 2.死循环
- 3.浮点数做循环条件
- 四、自我测试
- 1.用switch实现工作日/休息日判断(1-5工作日,6-7休息日)
- 代码示例:
- 代码逻辑:
- 执行结果示例:
- 扩展优化(Java 14+ 新语法)
- 2.用while循环计算1到100的偶数和
- 方法一代码示例:
- 代码逻辑:
- 方法二代码示例
- 代码逻辑
- 3.找出下面代码的问题
- 📌 终极记忆口诀
一、流程控制就像"道路选择"
1. 顺序结构 → 直行路
System.out.println("第一步"); // 先执行
System.out.println("第二步"); // 再执行
2. 分支结构 → 十字路口
场景:根据天气决定行程
// if-else结构
String weather = "晴天";
if(weather.equals("雨天")) {System.out.println("在家看电影");
} else if(weather.equals("雪天")) {System.out.println("堆雪人");
} else {System.out.println("去公园"); // 执行这里
}// 🌟 switch结构(适合固定选项)
int weekDay = 3;
switch(weekDay) {case 1: System.out.println("周一例会"); break;case 2: System.out.println("周二培训"); break;// case 3没有break会继续执行case4!case 3: System.out.println("周三团建");// 这里没有break → 穿透到case4case 4: System.out.println("周四写代码"); // 也会执行break;default: System.out.println("休息日");
}
// 输出:周三团建 → 周四写代码
3. 循环结构 → 绕圈跑步
场景:打印乘法表
// 🌟 for循环(明确循环次数)
for(int i=1; i<=9; i++) {for(int j=1; j<=i; j++) {System.out.print(j+"×"+i+"="+(i*j)+"\t");}System.out.println();
}// while循环(不确定次数)
int count = 0;
while(count < 5) {System.out.println("第" + (count+1) + "次尝试");count++;
}// do-while(至少执行一次)
int input;
do {System.out.println("请输入1-100的数字:");input = scanner.nextInt();
} while(input <1 || input >100); // 先执行,再判断
二、重点记忆技巧
1. 分支结构对比
结构 | 适用场景 | 注意点 |
---|---|---|
if | 条件范围判断(如分数段) | 可处理复杂条件 |
switch | 固定值匹配(如菜单选项) | 必须加break防止穿透 |
2. 循环结构对比
结构 | 使用场景 | 特点 |
---|---|---|
for | 已知循环次数(如遍历数组) | 简洁,控制变量在内部 |
while | 未知循环次数(如读取文件) | 可能一次都不执行 |
do-while | 至少要执行一次(如输入验证) | 先执行,后判断条件 |
3. 控制跳转
// break → 彻底停止循环
for(int i=1; i<=10; i++){if(i == 5) break; // 当i=5时直接结束循环System.out.print(i+" "); // 输出:1 2 3 4
}// continue → 跳过当前这次循环
for(int i=1; i<=5; i++){if(i == 3) continue; // 跳过i=3这次循环System.out.print(i+" "); // 输出:1 2 4 5
}
三、常见错误避坑指南
1.switch忘记写break
→ 导致多个case连续执行(穿透现象)
2.死循环
while(true){ // 缺少退出条件System.out.println("无限循环...");
}
3.浮点数做循环条件
for(double d=0.1; d!=1.0; d+=0.1){}
// 可能因精度问题导致无限循环
四、自我测试
1.用switch实现工作日/休息日判断(1-5工作日,6-7休息日)
代码示例:
/*** 用switch实现工作日/休息日判断(1-5工作日,6-7休息日)*/@Testpublic void testDayChecker(){int day = 3;switch(day){case 1:case 2:case 3:case 4:case 5:System.out.println("工作日");break;case 6:case 7:System.out.println("休息日");break;default:System.out.println("无效输入,请输入值-7之间的数字!");}}
代码逻辑:
1.变量 day
- 假设输入为整数 1-7,表示星期一到星期日。
2.switch 逻辑
- 合并 case:将 1-5 合并处理为工作日(通过连续写 case 标签实现)。
- 休息日:6 和 7 单独处理为休息日。
- break 关键字:确保执行完对应分支后跳出 switch,避免“穿透”到下一个分支。
- default:处理无效输入(如 0 或 8 等非1-7数字)。
执行结果示例:
输入 day = 3 → 输出 工作日
输入 day = 6 → 输出 休息日
输入 day = 9 → 输出 无效输入
扩展优化(Java 14+ 新语法)
@Testpublic void testDayChecker2(){int day = 7;switch (day) {case 1, 2, 3, 4, 5 -> System.out.println("工作日");case 6, 7 -> System.out.println("休息日");default -> System.out.println("无效输入");}}
优点:
- 通过合并 case 标签减少重复代码。
- 始终处理边界条件(如 default 分支)。
- switch 适用于固定值的匹配判断,比多个 if-else 更清晰。
2.用while循环计算1到100的偶数和
方法一代码示例:
/*** 用while循环计算1到100的偶数和* 方法一:通过遍历1-100的每个数字,利用取模运算%判断是否为偶数,再累加到总和中*/@Testpublic void testEvenSum1(){int i = 1;int sum = 0;while(i <= 100){if(i % 2 == 0){sum += i;}i++;}System.out.println("1-100的偶数和为:" + sum);}
代码逻辑:
- 循环初始化:i 从 1 开始,sum 初始化为 0。
- 循环条件:i <= 100,确保遍历 1 到 100 的所有数字。
- 判断逻辑:通过 i % 2 == 0 检查当前数字是否为偶数。
- 累加操作:若为偶数,将其值加到 sum。
- 更新计数器:i++ 递增计数器,避免无限循环。
方法二代码示例
/*** 用while循环计算1到100的偶数和* 方法二:直接从第一个偶数2开始,每次递增2,无需判断直接累加,效率更高*/@Testpublic void testEvenSum2(){int i = 2;int sum = 0;while(i <= 100){sum += i;i += 2;}System.out.println("1-100的偶数和为:" + sum);}
代码逻辑
- 循环初始化:i 从 2(第一个偶数)开始,sum 初始化为 0。
- 循环条件:i <= 100,确保遍历到最后一个偶数 100。
- 累加操作:直接累加当前偶数 i 到 sum。
- 更新计数器:i += 2 使计数器步长为 2,直接跳到下一个偶数。
3.找出下面代码的问题
@Testpublic void test1(){int i = 0;while(i < 5)System.out.println(i);i++;//这里会无限循环}
📌 终极记忆口诀
流程控制三兄弟:顺序分支加循环
if判断条件多,switch专治固定值
for循环次数明,while适合不确定
break彻底停循环,continue只跳这一次