蓝桥杯 Java B 组 - 第 1 周复习总结

一、复习本周知识点

1. 主要知识点

输入输出(Scanner & BufferedReader)

条件语句(if-else)

循环语句(for & while)

数组(Array & ArrayList)

字符串处理(String & StringBuilder)

递归(Factorial, Fibonacci, 汉诺塔)

集合(ArrayList, HashMap, HashSet)

2. 易错点复习

数组索引越界(IndexOutOfBoundsException)

字符串拼接性能问题(应使用 StringBuilder)

递归基准条件未设(导致无限递归)

HashMap 访问不存在的 key(应使用 getOrDefault()


二、综合题:学生成绩管理系统

�� 目标:

  1. 输入学生姓名和成绩
  2. 存储数据(ArrayList + HashMap)
  3. 计算平均分
  4. 找出最高分、最低分
  5. 按成绩排序
  6. 按姓名查询

1. 需求分析

�� 输入:

请输入学生人数:

5

请输入学生姓名和成绩:

Alice 90

Bob 85

Charlie 78

David 92

Eve 88

输出:

平均分:86.6

最高分:92(David)

最低分:78(Charlie)

按成绩排序:

David 92

Alice 90

Eve 88

Bob 85

Charlie 78

请输入查询的学生姓名:

Bob

Bob 的成绩是:85


2. Java 代码

java 复制代码
import java.util.*;



public class StudentManager {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        

        // 用 HashMap 存储学生信息

        HashMap<String, Integer> studentScores = new HashMap<>();

        ArrayList<Map.Entry<String, Integer>> sortedList;



        // 输入学生成绩

        System.out.println("请输入学生人数:");

        int n = scanner.nextInt();

        scanner.nextLine(); // 处理换行符



        System.out.println("请输入学生姓名和成绩:");

        for (int i = 0; i < n; i++) {

            String name = scanner.next();

            int score = scanner.nextInt();

            studentScores.put(name, score);

        }



        // 计算平均分

        int sum = 0, maxScore = Integer.MIN_VALUE, minScore = Integer.MAX_VALUE;

        String maxStudent = "", minStudent = "";



        for (Map.Entry<String, Integer> entry : studentScores.entrySet()) {

            int score = entry.getValue();

            sum += score;

            if (score > maxScore) {

                maxScore = score;

                maxStudent = entry.getKey();

            }

            if (score < minScore) {

                minScore = score;

                minStudent = entry.getKey();

            }

        }



        double avg = (double) sum / studentScores.size();

        System.out.printf("平均分:%.2f\n", avg);

        System.out.println("最高分:" + maxScore + "(" + maxStudent + ")");

        System.out.println("最低分:" + minScore + "(" + minStudent + ")");



        // 按成绩排序

        sortedList = new ArrayList<>(studentScores.entrySet());

        sortedList.sort((a, b) -> b.getValue() - a.getValue());



        System.out.println("按成绩排序:");

        for (Map.Entry<String, Integer> entry : sortedList) {

            System.out.println(entry.getKey() + " " + entry.getValue());

        }



        // 查询学生成绩

        System.out.println("请输入查询的学生姓名:");

        String queryName = scanner.next();

        if (studentScores.containsKey(queryName)) {

            System.out.println(queryName + " 的成绩是:" + studentScores.get(queryName));

        } else {

            System.out.println("学生不存在!");

        }

    }

}

3. 代码解析

  1. 数据存储
    1. 用 HashMap<String, Integer> 存储 学生姓名 → 成绩
  2. 遍历计算
    1. 计算 平均分:sum / size
    2. 计算 最高分、最低分
  3. 排序
    1. ArrayList<Map.Entry<K, V>>
    2. sort((a, b) -> b.getValue() - a.getValue())
  4. 查询
    1. getOrDefault()处理不存在的情况

三、蓝桥杯集合综合题常考点

|------------------|------------------|------------------|
| 考点 | 典型题目 | 常见难点 |
| ArrayList 操作 | 存储动态数据 | 删除元素导致索引变化 |
| HashMap 统计 | 单词频率、分数统计 | 处理 null |
| 排序(Lambda) | 成绩排序、字母排序 | List 转换 Map |
| 数据查询 | 查询学生成绩、查找最大值 | 不存在的 key 处理 |


四、易错点总结

忽略换行符

scanner.nextLine(); // 避免 nextInt() 影响字符串输入

直接删除 ArrayList中的元素

java 复制代码
for (int i = list.size() - 1; i >= 0; i--) {  

    if (list.get(i) == target) {

        list.remove(i);  // ✅ 正确(倒序删除避免索引错乱)

    }

}

遍历HashMap

java 复制代码
for (Map.Entry<String, Integer> entry : map.entrySet()) {

    System.out.println(entry.getKey() + ": " + entry.getValue());

}

五、启发式学习

1. 如何优化数据结构选择?

如果需要去重:用 HashSet

如果需要排序:用 TreeMap ArrayList.sort()

如果需要映射关系:用HashMap

蓝桥杯 Java B 组 - 第 1 周复习总结

经过 7 天的学习,我们已经掌握了 Java 基础语法数组与字符串操作递归与集合框架 等核心知识。这份总结将详细复习本周的 知识点、易错点、经典题目与解法,帮助你巩固学习内容,为后续提升打下坚实的基础!


第 1 天:输入输出(Scanner vs BufferedReader)

知识点

✅ Scanner**(适用于小数据量)**

java 复制代码
Scanner scanner = new Scanner(System.in);

int a = scanner.nextInt();

double b = scanner.nextDouble();

String s = scanner.next();  // 读取一个单词

String line = scanner.nextLine();  // 读取整行

✅ BufferedReader**(适用于大数据量)**

java 复制代码
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String line = reader.readLine();

int num = Integer.parseInt(line);  // 读取并转换

易错点

java 复制代码
❌ Scanner.nextInt() 后紧跟 nextLine(),导致读取不到字符串

int a = scanner.nextInt();

String line = scanner.nextLine();  // ❌ 读取的是换行符

✅ 解决方法

java 复制代码
scanner.nextLine();  // 先消耗换行符

String line = scanner.nextLine();

经典题目:多组 A+B 问题(EOF 处理)

输入

1 2

3 4

5 6

输出

3

7

11

解法

java 复制代码
Scanner scanner = new Scanner(System.in);

while (scanner.hasNextInt()) {

    int a = scanner.nextInt();

    int b = scanner.nextInt();

    System.out.println(a + b);

}

第 2 天:条件语句与循环

知识点

✅ if-else语句

java 复制代码
if (score >= 90) {

    System.out.println("优秀");

} else if (score >= 60) {

    System.out.println("及格");

} else {

    System.out.println("不及格");

}

✅ for循环

for (int i = 1; i <= 10; i++) {

System.out.print(i + " ");

}

✅ while循环

int i = 1;

while (i <= 10) {

System.out.print(i + " ");

i++;

}

易错点

忘记循环终止条件,导致死循环

while (true) { // ❌ 没有终止条件,程序无限运行

System.out.println("Hello");

}

经典题目:输出九九乘法表

java 复制代码
for (int i = 1; i <= 9; i++) {

    for (int j = 1; j <= i; j++) {

        System.out.print(j + "*" + i + "=" + (i * j) + " ");

    }

    System.out.println();

}

第 3 天:数组(一维数组 & 二维数组)

知识点

一维数组

int[] arr = {1, 2, 3, 4, 5};

System.out.println(arr[0]); // 访问第一个元素

二维数组

int[][] matrix = {

{1, 2, 3},

{4, 5, 6}

};

System.out.println(matrix[1][2]); // 输出 6

易错点

数组越界

int[] arr = new int[5];

System.out.println(arr[5]); // ❌ 抛出异常

经典题目:矩阵转置

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

transposed[j][i] = matrix[i][j];

}

}


第 4 天:字符串处理

知识点

字符串反转

StringBuilder sb = new StringBuilder("hello");

sb.reverse();

System.out.println(sb.toString()); // olleh

统计字符出现次数

HashMap<Character, Integer> freq = new HashMap<>();

for (char c : str.toCharArray()) {

freq.put(c, freq.getOrDefault(c, 0) + 1);

}

易错点

使用 String拼接导致性能低

String s = "";

for (int i = 0; i < 10000; i++) {

s += "a"; // ❌ O(n^2) 复杂度

}

正确做法

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 10000; i++) {

sb.append("a"); // ✅ O(n) 复杂度

}

经典题目:判断回文串

String reversed = new StringBuilder(str).reverse().toString();

System.out.println(str.equals(reversed) ? "YES" : "NO");


第 5 天:递归

知识点

递归求阶乘

public static int factorial(int n) {

return (n == 0 || n == 1) ? 1 : n * factorial(n - 1);

}

斐波那契数列

public static int fibonacci(int n) {

return (n == 0 || n == 1) ? n : fibonacci(n - 1) + fibonacci(n - 2);

}

易错点

递归缺少终止条件,导致无限递归

public static int wrong(int n) {

return n * wrong(n - 1); // ❌ 没有终止条件

}


第 6 天:集合(ArrayList & HashMap)

知识点

ArrayList

ArrayList<Integer> list = new ArrayList<>();

list.add(10);

list.remove(0);

System.out.println(list.contains(10)); // false

HashMap

HashMap<String, Integer> map = new HashMap<>();

map.put("Alice", 90);

System.out.println(map.get("Alice")); // 90

易错点

遍历 HashMap方式错误

java 复制代码
for (String key : map.keySet()) {  

    System.out.println(key + ": " + map.get(key));

}

经典题目:统计单词频率

java 复制代码
for (String word : words) {

    wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);

}

第 7 天:综合练习

题目:学生成绩管理系统

  • 录入学生姓名 & 成绩(HashMap)
  • 计算平均分、最高分、最低分
  • 按成绩排序
  • 查询学生成绩

掌握 HashMap + ArrayList.sort()处理数据


蓝桥杯考试技巧

先做简单题,确保基本分

使用 Scanner.hasNext()处理不定输入

StringBuilder而不是 String拼接

递归一定要有终止条件

遍历 HashMapentrySet()

相关推荐
不能只会打代码6 分钟前
Python人工智能技术全景:从基础框架到DeepSeek的突破性创新
开发语言·人工智能·python·deepseek
云卓SKYDROID21 分钟前
无人机之无线传输技术!
科技·算法·无人机·科普·云卓科技
清风吹雨泡泡25 分钟前
HCIA-10.生成树 STP 3/3
开发语言·php
pink大呲花33 分钟前
利用ES6 Set去重
开发语言·javascript·es6
蓝色洛特38 分钟前
【matlab优化算法-17期】基于DBO算法的微电网多目标优化调度
开发语言·算法·matlab
天天进步20151 小时前
Java全栈项目实战:在线课程评价系统开发
java·开发语言
豆豆酱1 小时前
强化学习到大模型训练理论概要(三)
算法
ONE_PUNCH_Ge1 小时前
Python 量化
开发语言·python
new6669991 小时前
Java实现模版方法模式
java·设计模式
Mr-Wanter1 小时前
使用 JFreeChart 创建动态图表:从入门到实战
开发语言·python·信息可视化