程序流程控制

1. 分支结构:if语句

在 Java 中,if 分支结构用于根据条件执行不同的代码块,具体有以下三种形式:


1.1 单分支结构

语法格式:

if (条件表达式) {
    // 条件为 true 时执行的代码
}

示例:

int score = 80;
if (score >= 60) {
    System.out.println("考试及格!");
}

说明:若条件成立,则执行代码块;否则跳过。


1.2 双分支结构(if-else)

语法格式:

if (条件表达式) {
    // 条件为 true 时执行的代码
} else {
    // 条件为 false 时执行的代码
}

示例:

int num = 7;
if (num % 2 == 0) {
    System.out.println("偶数");
} else {
    System.out.println("奇数"); // 输出:奇数
}

说明:根据条件结果选择执行其中一个代码块。


1.3 多分支结构(if-else if)

语法格式:

if (条件表达式1) {
    // 条件1为 true 时执行的代码
} else if (条件表达式2) {
    // 条件2为 true 时执行的代码
} else if (条件表达式3) {
    // 条件3为 true 时执行的代码
} 
...
else {
    // 所有条件均为 false 时执行的代码
}

示例:

int score = 85;
if (score >= 90) {
    System.out.println("等级:A");
} else if (score >= 80) {
    System.out.println("等级:B"); // 输出:等级:B
} else if (score >= 70) {
    System.out.println("等级:C");
} else {
    System.out.println("等级:D");
}

说明

  • 按顺序判断条件,执行第一个成立的条件对应的代码块。
  • else 块为可选,用于处理所有条件均不满足的情况。

注意事项
  1. 条件表达式:必须为布尔类型(true/false),不可使用数值类型(如 01)。
  2. 代码块作用域:在 {} 内定义的变量仅在块内有效。
  3. 执行顺序在多分支结构中,一旦某个条件成立,后续条件不再判断

2. 分支结构:switch语句(补充注意事项)

2.1 switch 的语法格式与执行流程

语法格式

switch (表达式) {
    case1:
        执行代码1;
        break;
    case2:
        执行代码2;
        break;
    ...
    default:
        执行代码n;
}

执行流程

  1. 计算 表达式 的值(必须是 byteshortintchar、枚举(JDK5+)、String(JDK7+))。
  2. 将表达式的结果依次与 case 后的值匹配,匹配成功则执行对应代码块。
  3. 若未匹配任何 case,则执行 default 块(可选)。
  4. break 用于跳出整个 switch 结构,若无 break,会发生“穿透”(继续执行后续 case 的代码)。

示例

String fruit = "Apple";
switch (fruit) {
    case "Apple":
        System.out.println("苹果");
        break;
    case "Banana":
        System.out.println("香蕉");
        break;
    default:
        System.out.println("未知水果");
}

2.2 注意事项(补充)
  1. 表达式类型限制

    • 支持类型:byteshortintchar枚举(JDK5+)、String(JDK7+)。
    • 不支持doublefloatlong
    // 错误示例:表达式类型为 long
    long num = 10L;
    switch (num) { // 编译报错
        // ...
    }
    
  2. case 值的要求

    • 必须为字面量(常量),不可使用变量或表达式。
    • 所有 case 的值必须唯一,不允许重复。
    final int VAL = 10;
    int a = 10;
    switch (a) {
        case 5: // 合法(字面量)
        case VAL: // 合法(常量)
        case a: // 非法(变量)
        // ...
    }
    
  3. break 与穿透现象

    • 若省略 break,会继续执行后续 case 的代码,直到遇到 break 或结束。
    • 穿透的合理利用:当多个 case 需要执行相同代码时,可合并处理。
    int month = 2;
    switch (month) {
        case 1:
        case 3:
        case 5:
            System.out.println("31天");
            break;
        case 2:
            System.out.println("28天");
            break;
        default:
            System.out.println("30天");
    }
    

2.3 穿透性的实际应用

适用场景
多个 case 分支需要执行相同逻辑时,通过穿透性减少重复代码。

示例

int scoreLevel = 2;
switch (scoreLevel) {
    case 1:
    case 2: // 合并处理 case 1 和 case 2
        System.out.println("普通等级");
        break;
    case 3:
        System.out.println("优秀等级");
        break;
    default:
        System.out.println("无效等级");
}

3. 循环结构

3.1 for 循环

语法格式

for (初始化语句; 循环条件; 迭代语句) {
    循环体语句;
}

执行流程

  1. 执行初始化语句(仅一次)。
  2. 检查循环条件:
    • 若为 true,执行循环体。
    • 若为 false,结束循环。
  3. 执行迭代语句,回到第2步。

示例

// 输出 3 次 Hello World
for (int i = 0; i < 3; i++) {
    System.out.println("Hello World");
}

3.2 while 循环

语法格式

初始化语句;
while (循环条件) {
    循环体语句;
    迭代语句;
}

执行流程

  1. 执行初始化语句。
  2. 检查循环条件:
    • 若为 true,执行循环体和迭代语句。
    • 若为 false,结束循环。

示例

int i = 0;
while (i < 3) {
    System.out.println("Hello World");
    i++;
}

3.3 do-while 循环

语法格式

初始化语句;
do {
    循环体语句;
    迭代语句;
} while (循环条件);

执行流程

  1. 执行初始化语句。
  2. 先执行一次循环体和迭代语句。
  3. 检查循环条件:
    • 若为 true,继续循环。
    • 若为 false,结束循环。

特点

  • 先执行后判断,至少执行一次循环体。

示例

int i = 0;
do {
    System.out.println("Hello World");
    i++;
} while (i < 3);

3.4 三种循环对比
对比维度forwhiledo-while
执行顺序先判断后执行先判断后执行先执行后判断
适用场景已知循环次数(如遍历数组)未知循环次数(如用户输入校验)至少执行一次(如菜单交互)
变量作用域控制变量仅在循环内有效控制变量在循环外可继续使用控制变量在循环外可继续使用

代码示例对比

// for 循环变量作用域
for (int i = 0; i < 3; i++) {
    System.out.println(i); // 合法
}
// System.out.println(i); // 报错,i 超出作用域

// while 循环变量作用域
int j = 0;
while (j < 3) {
    System.out.println(j);
    j++;
}
System.out.println(j); // 输出:3

3.5 死循环

定义:无限执行的循环,需外部干预才能终止。

语法形式

// for 死循环
for (;;) {
    System.out.println("Hello World1");
}

// while 死循环(推荐)
while (true) {
    System.out.println("Hello World2");
}

// do-while 死循环
do {
    System.out.println("Hello World3");
} while (true);

应用场景

  • 服务器监听请求。
  • 实时数据轮询。

3.6 循环嵌套

定义:循环内部包含另一个循环。

示例

// 外层循环控制行,内层循环控制列
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 5; j++) {
        System.out.print("❤️");
    }
    System.out.println();
}

输出

❤️❤️❤️❤️❤️  
❤️❤️❤️❤️❤️  
❤️❤️❤️❤️❤️  

特点

  • 外层循环每执行一次,内层循环完整执行一轮。

3.7 break 与 continue
关键字功能适用场景
break立即终止所在循环或 switch 分支循环中满足条件提前退出
continue跳过当前迭代,进入下一次循环循环中需要忽略某些特定情况

示例

// break 示例:找到第一个大于 5 的数后终止循环
int[] nums = {3, 6, 2, 8};
for (int num : nums) {
    if (num > 5) {
        System.out.println("找到:" + num);
        break; // 终止循环
    }
}

// continue 示例:跳过奇数,输出偶数
for (int i = 1; i <= 10; i++) {
    if (i % 2 != 0) {
        continue; // 跳过当前迭代
    }
    System.out.println(i);
}

注意事项

  • break 可结束循环或 switch,但不能跳出方法或类。
  • continue 仅能在循环中使用,不可用于 switch

总结
  • 循环选择原则
    • 已知次数用 for,未知次数用 while,必须执行一次用 do-while
  • 代码优化
    • 避免多层嵌套循环(时间复杂度高),必要时优化算法。
    • 死循环需谨慎使用,确保有退出条件或外部干预机制。
  • 控制语句
    • 合理使用 breakcontinue 简化逻辑,但避免滥用影响可读性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值