第一部分:本周知识总览

本周我们系统学习了Java程序控制流程的四大核心结构

条件判断

  • if-else基础结构
  • 多重if-else链
  • 嵌套if结构
  • 三元运算符

选择结构

  • switch-case语法
  • break关键字
  • default分支
  • 字符串switch

循环结构

  • for循环
  • while循环
  • do-while循环
  • foreach循环

流程控制

  • break语句
  • continue语句
  • 标签(label)使用
  • 嵌套循环控制

第二部分:条件判断详解

从基础if到三元运算符的完整语法体系

学习目标

掌握所有条件判断语法,能编写复杂的逻辑判断程序

1

if-else基础语法

if (条件表达式) {
    // 条件为true时执行
} else {
    // 条件为false时执行
}
条件判断
true分支
false分支
2

多重if-else链

int score = 85;
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 80) {
    System.out.println("良好");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}
3

三元运算符

// 基本语法:条件 ? 值1 : 值2
int a = 10, b = 20;
int max = (a > b) ? a : b;
System.out.println("最大值是:" + max); // 输出:20

// 嵌套三元运算符
String result = (score >= 60) ?
    ((score >= 90) ? "优秀" : "及格") :
    "不及格";

常见错误警示

  • 忘记花括号: 当if语句只有一行代码时,容易忘记花括号导致逻辑错误
  • 比较运算符错误: 将==写成=,导致赋值而非比较
  • 三元运算符过度嵌套: 超过2层嵌套会降低代码可读性

第三部分:switch-case选择结构

多分支选择的优雅解决方案

1

基础语法结构

switch (表达式) {
    case 值1:
        // 执行语句
        break;
    case 值2:
        // 执行语句
        break;
    default:
        // 默认执行语句
}
2

实际应用案例

import java.util.Scanner;

public class GradeCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入成绩等级(A-F):");
        String grade = scanner.next().toUpperCase();

        switch (grade) {
            case "A":
                System.out.println("优秀!90-100分");
                break;
            case "B":
                System.out.println("良好!80-89分");
                break;
            case "C":
            case "D":
                System.out.println("及格!60-79分");
                break;
            default:
                System.out.println("不及格!需要补考");
        }
        scanner.close();
    }
}

switch-case使用技巧

  • 从Java 7开始支持字符串switch
  • 多个case可以共享执行代码块
  • 不要忘记break,否则会出现"case穿透"
  • default分支可以放在任意位置,但通常放最后

第四部分:循环结构完全指南

for、while、do-while三种循环的深入解析

1

for循环基础

// 基本语法:for(初始化; 条件判断; 迭代更新)
for (int i = 0; i < 5; i++) {
    System.out.println("第" + (i+1) + "次循环");
}

// 输出1-100的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
System.out.println("1-100的和:" + sum); // 5050
2

增强for循环

int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
    System.out.println("当前数字:" + num);
}
3

while循环

// 猜数字游戏
import java.util.Scanner;
import java.util.Random;

Scanner scanner = new Scanner(System.in);
Random random = new Random();
int target = random.nextInt(100) + 1;
int guess = 0;
int attempts = 0;

while (guess != target) {
    System.out.print("猜一个1-100的数字:");
    guess = scanner.nextInt();
    attempts++;

    if (guess > target) {
        System.out.println("太大了!");
    } else if (guess < target) {
        System.out.println("太小了!");
    } else {
        System.out.println("恭喜!用了" + attempts + "次猜中");
    }
}
4

do-while循环

// 至少执行一次的循环
int password;
do {
    System.out.print("请输入密码(1234):");
    password = scanner.nextInt();

    if (password != 1234) {
        System.out.println("密码错误,请重试!");
    }
} while (password != 1234);
System.out.println("登录成功!");

for循环适用场景

  • 已知循环次数
  • 需要计数器变量
  • 遍历数组/集合

while循环适用场景

  • 未知循环次数
  • 基于条件判断
  • 读取文件/网络数据

do-while循环适用场景

  • 至少执行一次
  • 菜单选择
  • 输入验证

第五部分:break/continue/label控制

掌握循环控制的高级技巧

1

break语句

// 找出1-100的第一个能被17整除的数
for (int i = 1; i <= 100; i++) {
    if (i % 17 == 0) {
        System.out.println("第一个能被17整除的数是:" + i);
        break; // 找到后立即退出循环
    }
}
2

continue语句

// 打印1-20的奇数,跳过偶数
for (int i = 1; i <= 20; i++) {
    if (i % 2 == 0) {
        continue; // 跳过偶数
    }
    System.out.print(i + " ");
}
// 输出:1 3 5 7 9 11 13 15 17 19
3

标签(label)控制

// 使用标签控制嵌套循环
outerLoop: for (int i = 1; i <= 3; i++) {
    System.out.println("外层循环:" + i);

    for (int j = 1; j <= 3; j++) {
        if (j == 2 && i == 2) {
            break outerLoop; // 跳出外层循环
        }
        System.out.println(" 内层循环:" + j);
    }
}

流程控制使用警告

  • 过度使用break: 会使程序流程难以理解,考虑优化循环条件
  • 标签滥用: 标签会降低代码可读性,仅在嵌套循环必须使用
  • continue替代if: 有时直接用if判断更清晰

第六部分:综合实战演练

综合运用本周所学知识完成实际项目

1

项目需求

开发一个简单的学生成绩管理系统,包含以下功能:

  • 录入5个学生的成绩
  • 计算平均分
  • 统计各等级人数
  • 查找最高分学生
2

完整实现代码

import java.util.Scanner;

public class StudentGradeSystem {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int STUDENT_COUNT = 5;
        String[] names = new String[STUDENT_COUNT];
        int[] scores = new int[STUDENT_COUNT];

        // 1. 录入学生信息
        for (int i = 0; i < STUDENT_COUNT; i++) {
            System.out.print("请输入第" + (i+1) + "个学生姓名:");
            names[i] = scanner.next();

            do {
                System.out.print("请输入" + names[i] + "的成绩(0-100):");
                scores[i] = scanner.nextInt();
            } while (scores[i] < 0 || scores[i] > 100);
        }

        // 2. 计算统计信息
        int sum = 0;
        int excellent = 0, good = 0, pass = 0, fail = 0;
        int maxIndex = 0;

        for (int i = 0; i < STUDENT_COUNT; i++) {
            sum += scores[i];

            if (scores[i] > scores[maxIndex]) {
                maxIndex = i;
            }

            switch (scores[i] / 10) {
                case 10:
                case 9: excellent++; break;
                case 8:
                case 7: good++; break;
                case 6: pass++; break;
                default: fail++;
            }
        }

        // 3. 输出结果
        System.out.println("\n=== 成绩统计结果 ===");
        System.out.println("平均分:" + (sum / (double)STUDENT_COUNT));
        System.out.println("最高分:" + names[maxIndex] + " - " + scores[maxIndex] + "分");
        System.out.println("优秀:" + excellent + "人");
        System.out.println("良好:" + good + "人");
        System.out.println("及格:" + pass + "人");
        System.out.println("不及格:" + fail + "人");

        scanner.close();
    }
}

动手练习任务

  • 修改程序支持动态学生数量
  • 添加成绩排序功能
  • 实现按姓名搜索学生成绩
  • 添加异常处理(输入非数字时)

第七部分:常见错误与调试技巧

汇总新手最容易犯的错误及解决方案

语法错误

  • for循环缺少分号
  • switch语句缺少break
  • while条件后多写分号
// 错误示例
for (int i=0 i<10 i++) {} // 缺少分号
while (i < 10); {} // 分号导致空循环

逻辑错误

  • 循环条件设置错误
  • 边界值处理不当
  • 变量作用域问题
// 错误示例
for (int i=1; i<=10; i++) {
    int sum = 0; // 变量在循环内重置
    sum += i; // 结果始终为i
}

调试技巧

  • 使用System.out.println()输出变量值
  • IDEA断点调试
  • 逐步执行观察变量变化
// 调试技巧
for (int i=0; i<10; i++) {
    System.out.println("i=" + i + ", sum=" + sum);
    // 设置断点观察
}

调试建议

遇到循环问题时,建议:1) 先画流程图理清思路 2) 从简单案例开始测试 3) 逐步添加复杂度 4) 使用调试工具单步执行 5) 打印关键变量值

第八部分:第二周学习检查清单

确认本周所有知识点已掌握

条件判断 ✓

  • □ 能编写if-else链处理多分支
  • □ 理解三元运算符的用法
  • □ 掌握switch-case语法
  • □ 能处理字符串switch

循环结构 ✓

  • □ 能正确使用for循环
  • □ 理解while和do-while区别
  • □ 掌握增强for循环
  • □ 能处理嵌套循环

流程控制 ✓

  • □ 正确使用break退出循环
  • □ 理解continue的用法
  • □ 掌握标签控制
  • □ 能调试循环程序

本周成就

恭喜完成第一阶段第二周学习!您现在能够:

  • ✅ 编写复杂的条件判断程序
  • ✅ 熟练使用各种循环结构
  • ✅ 解决实际编程问题
  • ✅ 调试和修复常见错误

下周预告: 将学习数组、方法和面向对象基础