🚦 流程控制
if/else · switch · for · while · break/continue —— 程序的分岔路口和循环赛道
1. if / else if / else 怎么用?
用途:让程序"判断情况,走不同分支"。条件是一个 boolean 表达式(true 走 if,false 走 else)。
成绩等级判断(完整形态)
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) { // 只有上面的不满足才检查这里
System.out.println("及格");
} else {
System.out.println("不及格");
}
及格
// 执行逻辑:从上往下找第一个成立的条件,进入后整个 if-else 结束
// 注意:else if 的顺序很重要!先写范围大的会挡住后面的
🎯 易错点
- 条件判断用 == 不用 =(a = 5 是赋值,条件恒"真值 5",编译报错)
- else if 顺序:从严格到宽松(90 分以上先判断)
- 只有一条语句时可以省略大括号,但建议永远写大括号(防加代码时出错)
2. switch 和 if 怎么选?
switch:专门用于"一个值匹配多个固定选项"的场景——比 if-else 链更清晰。支持 int、char、String、枚举(JDK7+ 支持 String)。
switch 用法(含新写法)
String day = "MON";
// 经典写法(必须 break!否则穿透)
switch (day) {
case "MON": System.out.println("周一"); break;
case "FRI": System.out.println("周五"); break;
default: System.out.println("其他"); // 都不匹配走这里
}
// JDK14+ 箭头写法(自动 break,推荐)
switch (day) {
case "MON" -> System.out.println("周一");
case "FRI" -> System.out.println("周五");
default -> System.out.println("其他");
}
🎯 选择题:switch vs if
- 选项固定且少(星期、状态枚举、菜单)→ switch
- 条件复杂(范围、多个变量的组合)→ if-else
- 经典面试坑:case 里忘了 break 会"穿透"继续执行下一个 case
3. for 循环:重复做事的关键
为什么需要循环:打印 1 到 100 不能写 100 行。循环让"重复的步骤"只写一遍。
for 循环四要素
// for (①初始化; ②条件; ④步进) { ③循环体 }
for (int i = 1; i <= 5; i++) {
System.out.println("第 " + i + " 次");
}
第 1 次
第 2 次
第 3 次
第 4 次
第 5 次
// 执行顺序:① → ②(真)→③→④ → ②(真)→③→④ → ... → ②(假)结束
// 数数:从 0 开始是程序员习惯:for (int i = 0; i < 5; i++) 执行 5 次
经典题:求 1~100 的和
int sum = 0; // 累加器,初始 0
for (int i = 1; i <= 100; i++) {
sum += i; // sum = sum + i
}
System.out.println(sum);
5050
🎯 必会套路
- 累加器:sum += i(求总和);计数器:count++(数个数)
- 循环从 0 还是 1 开始:数组/集合从 0(下标),数数从 1
- 死循环:条件永远为真(for(;;))——新手要小心 i++ 忘写
4. while、do-while、break、continue?
- while:先判断后执行,次数不确定时用(如"直到用户输入正确为止")
- do-while:先执行一次再判断——至少执行一次的场景
- break:跳出整个循环(提前结束)
- continue:跳过本次循环,进入下一次
break / continue 对比
// 打印 1~10,遇到 3 跳过(continue),遇到 7 停止(break)
for (int i = 1; i <= 10; i++) {
if (i == 3) continue; // 跳过本次:不打印 3,继续 4
if (i == 7) break; // 结束整个循环:7 不打印
System.out.print(i + " ");
}
1 2 4 5 6
// while 经典:猜数字(次数不确定)
while (!isCorrect) {
// 读取用户输入,判断
}
嵌套循环:打印乘法口诀表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) { // 内层只到 i
System.out.print(j + "x" + i + "=" + (i * j) + " ");
}
System.out.println(); // 外层每轮换行
}
✍️ 练习题(必做!循环是地基)
- 1. 打印 1~100 中的所有偶数(提示:i%2==0)
- 2. 求 1~100 中所有 7 的倍数的个数
- 3. 打印九九乘法表(上面代码自己敲一遍)
- 4. 打印 1~20,遇到 4 的倍数打印"过"(continue + 判断)
- 5. 求 n!(阶乘):5! = 5×4×3×2×1 = 120
- 6. 挑战:判断一个数是不是素数(质数)——用循环试除 2~√n
5. 怎么从键盘读入数据?(Scanner)
前面所有例子都是"程序自己算",但真正的程序要能接收用户输入。
Java 用 Scanner 读键盘,这一步在练习题里反复用到(第 17 题点餐菜单、第 25 题猜数字)。
Scanner 基本用法(完整可运行)
import java.util.Scanner; // ① 必须 import
public class InputDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // ② 绑定到键盘
System.out.print("请输入你的名字:");
String name = sc.nextLine(); // 读一整行(含空格)
System.out.print("请输入你的年龄:");
int age = sc.nextInt(); // 读一个整数
System.out.println("你好 " + name + ",你今年 " + age + " 岁");
sc.close(); // ③ 用完关闭
}
}
常用读取方法:
nextInt()读整数、nextDouble()读小数、next()读一个单词(遇空格停)、nextLine()读一整行hasNextInt()判断下一个输入是不是整数——做健壮的程序时会用到
🎯 新手必踩的三个坑
- nextInt() 之后接 nextLine() 会读到空行:因为 nextInt 只读走数字,换行符还留在缓冲区。
解决:中间补一次
sc.nextLine();把换行符吃掉 - 输入类型不匹配会抛异常:输入"abc"却调
nextInt()→InputMismatchException。 先用hasNextInt()判断,或包一层 try-catch - 忘记 import:
import java.util.Scanner;不写会编译报错"找不到符号"