Java 控制结构

控制结构用于控制程序的执行流程,包括条件语句和循环语句。

条件语句

if 语句

public class IfStatement {
    public static void main(String[] args) {
        int score = 85;
        
        // 单 if 语句
        if (score >= 60) {
            System.out.println("及格");
        }
        
        // if-else 语句
        if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
        
        // if-else if-else 语句
        if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良好");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

三元运算符

public class TernaryOperator {
    public static void main(String[] args) {
        int a = 10, b = 20;
        
        // 语法:条件 ? 值1 : 值2
        // 如果条件为 true,返回值1;否则返回值2
        int max = (a > b) ? a : b;
        System.out.println("最大值:" + max);
        
        String result = (a > 0) ? "正数" : "非正数";
        System.out.println("结果:" + result);
        
        // 嵌套三元运算符(不推荐,可读性差)
        int x = 10;
        String msg = (x > 0) ? ((x > 10) ? "大于10" : "小于等于10") : "非正数";
        System.out.println("msg: " + msg);
    }
}

switch 语句

public class SwitchStatement {
    public static void main(String[] args) {
        int day = 3;
        
        // switch 语句(Java 7+ 支持 String)
        switch (day) {
            case 1:
                System.out.println("星期一");
                break;  // 必须使用 break,否则会继续执行下一个 case
            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:
            case 7:  // 多个 case 可以合并
                System.out.println("周末");
                break;
            default:  // 默认情况
                System.out.println("无效的日期");
        }
        
        // switch 表达式(Java 14+)
        String dayName = switch (day) {
            case 1 -> "星期一";
            case 2 -> "星期二";
            case 3 -> "星期三";
            case 4 -> "星期四";
            case 5 -> "星期五";
            case 6, 7 -> "周末";
            default -> "无效的日期";
        };
        System.out.println("dayName: " + dayName);
        
        // switch 支持 String(Java 7+)
        String season = "春天";
        switch (season) {
            case "春天":
                System.out.println("万物复苏");
                break;
            case "夏天":
                System.out.println("烈日炎炎");
                break;
            case "秋天":
                System.out.println("秋高气爽");
                break;
            case "冬天":
                System.out.println("白雪皑皑");
                break;
            default:
                System.out.println("未知季节");
        }
    }
}

循环语句

for 循环

public class ForLoop {
    public static void main(String[] args) {
        // 标准 for 循环
        // 语法:for (初始化; 条件; 更新) { 循环体 }
        for (int i = 0; i < 5; i++) {
            System.out.println("i = " + i);
        }
        // 输出:
        // i = 0
        // i = 1
        // i = 2
        // i = 3
        // i = 4
        
        // 倒序循环
        for (int i = 5; i > 0; i--) {
            System.out.println("i = " + i);
        }
        
        // 步长不为 1
        for (int i = 0; i < 10; i += 2) {
            System.out.println("i = " + i);
        }
        // 输出:0, 2, 4, 6, 8
        
        // 增强 for 循环(for-each,Java 5+)
        int[] numbers = {1, 2, 3, 4, 5};
        for (int num : numbers) {
            System.out.println("num = " + num);
        }
        
        // 嵌套循环
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                System.out.print(i + "x" + j + "=" + (i * j) + " ");
            }
            System.out.println();
        }
        // 输出:
        // 1x1=1 1x2=2 1x3=3
        // 2x1=2 2x2=4 2x3=6
        // 3x1=3 3x2=6 3x3=9
    }
}

while 循环

public class WhileLoop {
    public static void main(String[] args) {
        // while 循环:先判断条件,再执行循环体
        int i = 0;
        while (i < 5) {
            System.out.println("i = " + i);
            i++;
        }
        // 输出:0, 1, 2, 3, 4
        
        // 计算 1 到 100 的和
        int sum = 0;
        int num = 1;
        while (num <= 100) {
            sum += num;
            num++;
        }
        System.out.println("1 到 100 的和:" + sum);
        
        // 无限循环(需要 break 退出)
        int count = 0;
        while (true) {
            count++;
            if (count > 5) {
                break;  // 退出循环
            }
            System.out.println("count = " + count);
        }
    }
}

do-while 循环

public class DoWhileLoop {
    public static void main(String[] args) {
        // do-while 循环:先执行循环体,再判断条件
        // 至少执行一次
        int i = 0;
        do {
            System.out.println("i = " + i);
            i++;
        } while (i < 5);
        // 输出:0, 1, 2, 3, 4
        
        // 即使条件一开始就为 false,也会执行一次
        int j = 10;
        do {
            System.out.println("j = " + j);
            j++;
        } while (j < 5);  // 条件为 false,但会执行一次
        // 输出:j = 10
    }
}

跳转语句

break 语句

public class BreakStatement {
    public static void main(String[] args) {
        // break:跳出当前循环
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                break;  // 当 i == 5 时,跳出循环
            }
            System.out.println("i = " + i);
        }
        // 输出:0, 1, 2, 3, 4
        
        // 带标签的 break:跳出指定循环
        outer: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == 1 && j == 1) {
                    break outer;  // 跳出外层循环
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }
        // 输出:
        // i = 0, j = 0
        // i = 0, j = 1
        // i = 0, j = 2
        // i = 1, j = 0
    }
}

continue 语句

public class ContinueStatement {
    public static void main(String[] args) {
        // continue:跳过本次循环,继续下一次循环
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                continue;  // 跳过偶数
            }
            System.out.println("i = " + i);
        }
        // 输出:1, 3, 5, 7, 9(只输出奇数)
        
        // 带标签的 continue:跳过指定循环的本次迭代
        outer: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == 1 && j == 1) {
                    continue outer;  // 跳过外层循环的本次迭代
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }
    }
}

return 语句

public class ReturnStatement {
    public static void main(String[] args) {
        // return:退出方法
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                return;  // 退出 main 方法,程序结束
            }
            System.out.println("i = " + i);
        }
        System.out.println("这行不会执行");
    }
    
    // 带返回值的 return
    public static int add(int a, int b) {
        return a + b;  // 返回计算结果
    }
    
    // 提前返回
    public static String checkAge(int age) {
        if (age < 0) {
            return "年龄无效";  // 提前返回
        }
        if (age < 18) {
            return "未成年";
        }
        return "成年";
    }
}

实际应用示例

示例1:查找数组中的最大值

public class FindMax {
    public static void main(String[] args) {
        int[] numbers = {3, 7, 2, 9, 1, 5};
        
        int max = numbers[0];  // 假设第一个元素是最大值
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > max) {
                max = numbers[i];
            }
        }
        System.out.println("最大值:" + max);
    }
}

示例2:判断质数

public class PrimeNumber {
    public static void main(String[] args) {
        int num = 17;
        boolean isPrime = true;
        
        if (num < 2) {
            isPrime = false;
        } else {
            // 只需要检查到 sqrt(num)
            for (int i = 2; i * i <= num; i++) {
                if (num % i == 0) {
                    isPrime = false;
                    break;  // 找到因子,不是质数,退出循环
                }
            }
        }
        
        if (isPrime) {
            System.out.println(num + " 是质数");
        } else {
            System.out.println(num + " 不是质数");
        }
    }
}

示例3:打印九九乘法表

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "x" + i + "=" + (i * j) + "\t");
            }
            System.out.println();  // 换行
        }
    }
}

示例4:菜单选择

import java.util.Scanner;
 
public class MenuSelection {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        while (true) {
            System.out.println("=== 菜单 ===");
            System.out.println("1. 选项一");
            System.out.println("2. 选项二");
            System.out.println("3. 选项三");
            System.out.println("0. 退出");
            System.out.print("请选择:");
            
            int choice = scanner.nextInt();
            
            switch (choice) {
                case 1:
                    System.out.println("执行选项一");
                    break;
                case 2:
                    System.out.println("执行选项二");
                    break;
                case 3:
                    System.out.println("执行选项三");
                    break;
                case 0:
                    System.out.println("退出程序");
                    return;  // 退出程序
                default:
                    System.out.println("无效的选择");
            }
        }
    }
}

总结

Java 控制结构包括:

  • 条件语句:if、if-else、switch
  • 循环语句:for、while、do-while
  • 跳转语句:break、continue、return

掌握这些控制结构可以编写各种复杂的程序逻辑。


相关链接


java 控制结构 条件语句 循环语句