一、复习本周知识点
1. 主要知识点
✅ 输入输出(Scanner & BufferedReader)
✅ 条件语句(if-else)
✅ 循环语句(for & while)
✅ 数组(Array & ArrayList)
✅ 字符串处理(String & StringBuilder)
✅ 递归(Factorial, Fibonacci, 汉诺塔)
✅ 集合(ArrayList, HashMap, HashSet)
2. 易错点复习
❌ 数组索引越界(IndexOutOfBoundsException)
❌ 字符串拼接性能问题(应使用 StringBuilder)
❌ 递归基准条件未设(导致无限递归)
❌ HashMap 访问不存在的 key(应使用 getOrDefault())
二、综合题:学生成绩管理系统
�� 目标:
- 输入学生姓名和成绩
- 存储数据(ArrayList + HashMap)
- 计算平均分
- 找出最高分、最低分
- 按成绩排序
- 按姓名查询
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()) {