本节学习目标
- 掌握 Java 顺序、分支、循环控制语句
- 熟悉输入输出
- 理解
break、continue - 练习:素数、水仙花数、猜数字游戏
1. 顺序结构
代码按照书写顺序从上到下逐行执行。
java
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
/*输出
aaa
bbb
ccc
*/
调换代码书写顺序,执行输出顺序也跟着改变。
2. 分支结构
2.1 if‑else 语句
if 括号里面必须是 boolean 表达式。
格式 1:单 if
java
if(布尔表达式){
//条件为true执行
}
示例:考试大于等于 90 奖励鸡腿
java
int score = 92;
if(score >= 90){
System.out.println("吃个大鸡腿!!!");
}
格式 2:if‑else 二选一
java
if(布尔表达式){
//true执行
}else{
//false执行
}
格式 3:多分支 if‑else if‑else
java
if(score >= 90){
System.out.println("优秀");
}else if(score >= 80){
System.out.println("良好");
}else if(score >= 70){
System.out.println("中等");
}else if(score >= 60){
System.out.println("及格");
}else if(score >= 0){
System.out.println("不及格");
}else{
System.out.println("错误数据");
}
基础练习代码
练习 1:奇偶判断
java
int num = 10;
if (num % 2 == 0) {
System.out.println("num 是偶数");
} else {
System.out.println("num 是奇数");
}
练习 2:正数、负数、0
java
int num = 10;
if (num > 0) {
System.out.println("正数");
} else if (num < 0) {
System.out.println("负数");
} else {
System.out.println("0");
}
练习 3:闰年判断
闰年规则: ①普通年份:能被 4 整除,但不能被 100 整除; ②世纪年份:能被 400 整除。
java
int year = 2000;
if (year % 100 == 0) {
//世纪闰年
if (year % 400 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
} else {
//普通闰年
if (year % 4 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
}
⚠️if 常见坑点
- 代码风格 :Java 推荐大括号
{和if/else写在同一行,代码更紧凑。
java
//推荐
if (x == 10) {
} else {
}
- 多余分号陷阱 :
if(条件);后面多写分号,代表 if 的语句是空语句,后面大括号代码不受 if 控制,永远执行。
java
int x = 20;
if (x == 10) ; //这里分号!!!!
{
System.out.println("hehe");
}
//一定会输出hehe
- 悬垂 else :不写大括号的时候,
else总是匹配离它最近的 if 。开发中一定加上大括号,避免歧义。
java
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
//else匹配内层if,不是外层if!!!
2.2 switch 分支语句
语法
java
switch(表达式){
case 常量1:{
语句;
break;
}
case 常量2:{
语句;
break;
}
default:{
//所有case都不匹配执行
break;
}
}
示例:输出星期
java
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("输入有误");
break;
}
switch 重要限制(面试考点)
- switch 括号里面表达式支持的类型:
- 基本类型:
byte、short、char、int;❌不支持 long、double、float - 引用类型:
String字符串、枚举 enum
- 基本类型:
- case 后面必须是常量,不能写变量;多个 case 常量不能重复。
- 不要漏掉 break,会发生 case 穿透,继续执行后续 case 代码。
java
int day =1;
switch(day){
case 1:
System.out.println("星期一");
//没有break!!
case 2:
System.out.println("星期二");
break;
}
//输出:星期一 星期二
- switch 不方便处理区间条件(如
10<num<20),这种场景优先用if‑else。 - 可以嵌套 switch,但可读性很差,开发不推荐。
小结:switch 适合等值离散常量匹配;区间、复杂逻辑全部用 if‑else。
3. 循环结构
3.1 while 循环
语法:
java
while(循环条件){
循环体语句;
}
逻辑:条件为 true 执行循环体;条件 false 结束循环。
示例 1:打印 1‑10
java
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
示例 2:求 1‑100 累加和
java
int n = 1;
int result = 0;
while (n <= 100) {
result += n;
n++;
}
System.out.println(result); //5050
示例 3:5 的阶乘
java
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(result);
示例 4:求 1! + 2! +3! +4! +5!
java
int num = 1;
int sum = 0;
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;
num++;
}
System.out.println("sum = " + sum);
while 坑点:不要在
while(条件)后面多加;,变成空循环,死循环!
java
int num = 1;
while (num <= 10); { //分号!!空语句死循环
System.out.println(num);
num++;
}
3.2 break
直接终止整个循环,跳出循环。 示例:找到 100‑200 第一个 3 的倍数
java
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break; //直接结束while循环
}
num++;
}
3.3 continue
跳过本次循环剩下语句,直接进入下一轮循环判断,不会跳出循环。
⚠️continue 前面注意更新循环变量,否则死循环!
java
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; //一定要更新!!
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
区分记忆:
break:结束整个循环 ;continue:结束本次迭代,继续下一轮。
3.4 for 循环(开发最常用)
语法格式
java
for(表达式1;布尔表达式2;表达式3){
循环体;
}
- 表达式 1:初始化循环变量,只执行一次
- 表达式 2:循环条件,true 执行循环;false 终止
- 表达式 3:循环变量更新,每轮循环体结束后执行
执行顺序:表达式1 → 表达式2(判断) →循环体 →表达式3 →表达式2判断......
示例 1:打印 1‑10
java
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
示例 2:1‑100 求和
java
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
示例 3:5 阶乘
java
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
示例 4:1!+2!+3!+4!+5!
java
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
for 循环注意点
- 同样建议写大括号;
- 不要在
for()后面写多余分号,会造成空循环; - 第二个条件表达式省略:
for(;;)代表死循环; - for 同样支持
break、continue。
3.5 do‑while 循环(了解,很少用)
先执行循环体,再判断条件,循环体至少执行一次。末尾分号不能丢!
java
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10); //末尾必须写分号
使用场景少,优先使用
for / while。
4. 课后练习题
- 判断一个数字是否为素数(只能被 1 和自身整除)
- 输出 0‑999 所有水仙花数:三位数,各位数字立方之和等于自身,例如
153 = 1³+5³+3³。
水仙花数参考代码
java
//遍历全部三位数
for(int num = 100; num <= 999; num++){
int ge = num % 10;
int shi = num /10 %10;
int bai = num /100;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == num){
System.out.println(num);
}
}
📝本篇核心考点总结
- 顺序结构从上至下逐行执行。
- if 条件必须 boolean;警惕多余分号、悬垂 else,开发一律加上大括号。
- switch 支持
byte/short/char/int/String/枚举;不能 long/double/float ;注意break防止 case 穿透;适合等值常量判断。 - while:先判断,后执行;do‑while:先执行,后判断,至少跑一次。
- for 循环:初始化只跑一次;结构清晰,计数循环优先选 for。
break:终止全部循环;continue跳过本轮,直接下一轮,注意循环变量更新,防止死循环。
面试小问题 Q:
if(x == 10);{System.out.println("hello");}大括号里面会不会执行? A:会执行;if 后面的分号是空语句,if 只控制空语句,大括号是独立代码块,不受 if 条件控制。