当前位置: 首页 > article >正文

蓝桥杯 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 代码

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 中的元素

for (int i = list.size() - 1; i >= 0; i--) {  

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

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

    }

}

遍历 HashMap

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(适用于小数据量)

Scanner scanner = new Scanner(System.in);

int a = scanner.nextInt();

double b = scanner.nextDouble();

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

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

✅ BufferedReader(适用于大数据量)

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String line = reader.readLine();

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

 易错点

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

int a = scanner.nextInt();

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

✅ 解决方法

scanner.nextLine();  // 先消耗换行符

String line = scanner.nextLine();

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

输入

1 2

3 4

5 6

输出

3

7

11

解法

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 语句

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");

}

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

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 方式错误

for (String key : map.keySet()) {  

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

}

 经典题目:统计单词频率

for (String word : words) {

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

}


第 7 天:综合练习

 题目:学生成绩管理系统

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

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


蓝桥杯考试技巧

先做简单题,确保基本分
使用 Scanner.hasNext() 处理不定输入
StringBuilder 而不是 String 拼接
递归一定要有终止条件
遍历 HashMap 用 entrySet()


http://www.kler.cn/a/542460.html

相关文章:

  • SpringBootWeb三层架构分层解耦
  • elasticsearch
  • PyQt学习记录01——加法计算器
  • 修复缺失的tobii.gameintegration.dll文件,让游戏更顺畅
  • LabVIEW在呼吸机测试气体容量计算
  • 工作中常用的jmeter自带函数有哪些?
  • 3、k8s项目的生命周期和yaml文件
  • uniapp商城之登录模块
  • 《深度学习》——CNN卷积神经网络模型及项目实例
  • 【Prometheus】MySQL主从搭建,以及如何通过prometheus监控MySQL运行状态
  • FTP(File Transfer Protocol)-文件传输协议
  • C++引用深度详解
  • Unity做2D小游戏5------多个动画互相转换
  • docker配置国内源
  • 【unity实战】实现摄像机跟随效果
  • 【AI知识点】大模型开源的各种级别和 deepseek 的开源级别
  • Java 大视界 -- 5G 与 Java 大数据融合的行业应用与发展趋势(82)
  • ArcGIS Pro SDK (二十六)自定义配置
  • 基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试
  • 25考研电子信息复试面试常见核心问题真题汇总,电子信息考研复试没有项目怎么办?电子信息考研复试到底该如何准备?
  • 进阶版MATLAB 3D柱状图
  • 【系统架构设计师】操作系统 - 进程管理 ① ( 进程概念 | 进程组成 | 进程 与 程序 | 进程 与 线程 | 线程 可共享的资源 - ☆考点 )
  • 工具模块新增JSON格式化打印工具类
  • 什么是容器化,它有什么好处,对后端开发有什么影响?
  • 【2025-ICLR-未中】教授多模态大语言模型理解心电图图像
  • 【C#零基础从入门到精通】(五)——C# {n:format} 占位符