欢迎光临
我们一直在努力

【Java SE】程序逻辑控制

本节学习目标

  • 掌握 Java 顺序、分支、循环控制语句
  • 熟悉输入输出
  • 理解break、continue
  • 练习:素数、水仙花数、猜数字游戏
  • 1. 顺序结构

    代码按照书写顺序从上到下逐行执行。

    System.out.println("aaa");
    System.out.println("bbb");
    System.out.println("ccc");
    /*输出
    aaa
    bbb
    ccc
    */

    调换代码书写顺序,执行输出顺序也跟着改变。

    2. 分支结构

    2.1 if‑else 语句

    if 括号里面必须是 boolean 表达式。

    格式 1:单 if

    if(布尔表达式){
    //条件为true执行
    }

    示例:考试大于等于 90 奖励鸡腿

    int score = 92;
    if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
    }

    格式 2:if‑else 二选一

    if(布尔表达式){
    //true执行
    }else{
    //false执行
    }

    格式 3:多分支 if‑else if‑else

    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:奇偶判断

    int num = 10;
    if (num % 2 == 0) {
    System.out.println("num 是偶数");
    } else {
    System.out.println("num 是奇数");
    }

    练习 2:正数、负数、0

    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 整除。

    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写在同一行,代码更紧凑。
  • //推荐
    if (x == 10) {

    } else {

    }

  • 多余分号陷阱:if(条件);后面多写分号,代表 if 的语句是空语句,后面大括号代码不受 if 控制,永远执行。
  • int x = 20;
    if (x == 10) ; //这里分号!!!!
    {
    System.out.println("hehe");
    }
    //一定会输出hehe

  • 悬垂 else:不写大括号的时候,else总是匹配离它最近的 if。开发中一定加上大括号,避免歧义。
  • 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 分支语句

    语法

    switch(表达式){
    case 常量1:{
    语句;
    break;
    }
    case 常量2:{
    语句;
    break;
    }
    default:{
    //所有case都不匹配执行
    break;
    }
    }

    示例:输出星期

    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 代码。
  • 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 循环

    语法:

    while(循环条件){
    循环体语句;
    }

    逻辑:条件为 true 执行循环体;条件 false 结束循环。

    示例 1:打印 1‑10

    int num = 1;
    while (num <= 10) {
    System.out.println(num);
    num++;
    }

    示例 2:求 1‑100 累加和

    int n = 1;
    int result = 0;
    while (n <= 100) {
    result += n;
    n++;
    }
    System.out.println(result); //5050

    示例 3:5 的阶乘

    int n = 1;
    int result = 1;
    while (n <= 5) {
    result *= n;
    n++;
    }
    System.out.println(result);

    示例 4:求 1! + 2! +3! +4! +5!

    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(条件)后面多加;,变成空循环,死循环!

    int num = 1;
    while (num <= 10); { //分号!!空语句死循环
    System.out.println(num);
    num++;
    }

    3.2 break

    直接终止整个循环,跳出循环。 示例:找到 100‑200 第一个 3 的倍数

    int num = 100;
    while (num <= 200) {
    if (num % 3 == 0) {
    System.out.println("找到了 3 的倍数, 为:" + num);
    break; //直接结束while循环
    }
    num++;
    }

    3.3 continue

    跳过本次循环剩下语句,直接进入下一轮循环判断,不会跳出循环。

    ⚠️continue 前面注意更新循环变量,否则死循环!

    int num = 100;
    while (num <= 200) {
    if (num % 3 != 0) {
    num++; //一定要更新!!
    continue;
    }
    System.out.println("找到了 3 的倍数, 为:" + num);
    num++;
    }

    区分记忆: break:结束整个循环; continue:结束本次迭代,继续下一轮。

    3.4 for 循环(开发最常用)

    语法格式

    for(表达式1;布尔表达式2;表达式3){
    循环体;
    }

    • 表达式 1:初始化循环变量,只执行一次
    • 表达式 2:循环条件,true 执行循环;false 终止
    • 表达式 3:循环变量更新,每轮循环体结束后执行

    执行顺序:表达式1 → 表达式2(判断) →循环体 →表达式3 →表达式2判断……

    示例 1:打印 1‑10

    for (int i = 1; i <= 10; i++) {
    System.out.println(i);
    }

    示例 2:1‑100 求和

    int sum = 0;
    for (int i = 1; i <= 100; i++) {
    sum += i;
    }
    System.out.println("sum = " + sum);

    示例 3:5 阶乘

    int result = 1;
    for (int i = 1; i <= 5; i++) {
    result *= i;
    }
    System.out.println("result = " + result);

    示例 4:1!+2!+3!+4!+5!

    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 循环(了解,很少用)

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

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

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

    4. 课后练习题

  • 判断一个数字是否为素数(只能被 1 和自身整除)
  • 输出 0‑999 所有水仙花数:三位数,各位数字立方之和等于自身,例如153 = 1³+5³+3³。
  • 水仙花数参考代码

    //遍历全部三位数
    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 条件控制。

    赞(0)
    未经允许不得转载:171主机测评 » 【Java SE】程序逻辑控制
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址