【Java SE】程序逻辑控制

本节学习目标

  1. 掌握 Java 顺序、分支、循环控制语句
  2. 熟悉输入输出
  3. 理解breakcontinue
  4. 练习:素数、水仙花数、猜数字游戏

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 常见坑点

  1. 代码风格 :Java 推荐大括号{if/else写在同一行,代码更紧凑。
java 复制代码
//推荐
if (x == 10) {

} else {

}
  1. 多余分号陷阱if(条件);后面多写分号,代表 if 的语句是空语句,后面大括号代码不受 if 控制,永远执行
java 复制代码
int x = 20;
if (x == 10) ; //这里分号!!!!
{
    System.out.println("hehe");
}
//一定会输出hehe
  1. 悬垂 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 重要限制(面试考点)
  1. switch 括号里面表达式支持的类型:
    • 基本类型:byteshortcharint❌不支持 long、double、float
    • 引用类型:String字符串、枚举 enum
  2. case 后面必须是常量,不能写变量;多个 case 常量不能重复。
  3. 不要漏掉 break,会发生 case 穿透,继续执行后续 case 代码。
java 复制代码
int day =1;
switch(day){
    case 1:
        System.out.println("星期一");
        //没有break!!
    case 2:
        System.out.println("星期二");
        break;
}
//输出:星期一 星期二
  1. switch 不方便处理区间条件(如10<num<20),这种场景优先用if‑else
  2. 可以嵌套 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 循环注意点

  1. 同样建议写大括号;
  2. 不要在for()后面写多余分号,会造成空循环;
  3. 第二个条件表达式省略:for(;;)代表死循环;
  4. for 同样支持breakcontinue

3.5 do‑while 循环(了解,很少用)

先执行循环体,再判断条件,循环体至少执行一次。末尾分号不能丢!

java 复制代码
int num = 1;
do {
    System.out.println(num);
    num++;
} while (num <= 10); //末尾必须写分号

使用场景少,优先使用for / while

4. 课后练习题

  1. 判断一个数字是否为素数(只能被 1 和自身整除)
  2. 输出 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);
    }
}

📝本篇核心考点总结

  1. 顺序结构从上至下逐行执行。
  2. if 条件必须 boolean;警惕多余分号、悬垂 else,开发一律加上大括号。
  3. switch 支持byte/short/char/int/String/枚举不能 long/double/float ;注意break防止 case 穿透;适合等值常量判断。
  4. while:先判断,后执行;do‑while:先执行,后判断,至少跑一次。
  5. for 循环:初始化只跑一次;结构清晰,计数循环优先选 for。
  6. break:终止全部循环;continue跳过本轮,直接下一轮,注意循环变量更新,防止死循环。

面试小问题 Q:if(x == 10);{System.out.println("hello");} 大括号里面会不会执行? A:会执行;if 后面的分号是空语句,if 只控制空语句,大括号是独立代码块,不受 if 条件控制。

相关推荐
Zane19941 小时前
两个线程算两遍循环,为什么只快了一点点不是两倍?GIL连环追问
后端·python
find1star1 小时前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
小灰灰搞电子1 小时前
Python 函数参数分隔符 *:Keyword-Only Arguments 原理与实践
开发语言·python
2601_962297251 小时前
Authlib 0.13通用Python认证授权库wheel安装包(支持Python 2/3)
python·jwt·oauth2.0·authlib·openidconnect
SamChan901 小时前
大文件多语言PDF翻译性能实测:300页文档的耗时、内存占用与失败率分析
python·ai·pdf·机器翻译
染的人1 小时前
Java 10x15cm面单PDF转换A4格式PDF
java·开发语言·pdf
泡海椒1 小时前
JQuick-java (JQuick-ASM)性能优化原理:字节码生成与缓存机制深度解析
java·缓存·性能优化
光电笑映1 小时前
Linux 线程同步与互斥:锁的本质、条件变量与信号量的底层原理
linux·运维·服务器·开发语言·c++
GIS数据转换器1 小时前
遥感GIS一体化技术应用平台
大数据·人工智能·python·安全·数据挖掘