头歌 Java 实验五——集合框架

前言:

今天晚上心血来潮,准备写道Java的题,打开头歌找到了这个,原以为会很快解决这题,但没想到的是我还是花了一个多小时,主要还是不够理解HashMap这个类。主要就是要注意到HashMap的key和value都得是类,比如int的包裹类是Integer

第1关: 实验五

任务描述

本关任务:设计一个程序,管理一个班级的若干学生(学生的姓名是唯一的),每个学生都修了若干门课程,没门课程都有了一个成绩。但一个班的同学修的课程不完全一样。

要求:

该程序用集合框架的Map接口来实现。学生用Map来存储,键用学生姓名,值是另一个存储课程的Map;每个同学修的若干门课程也用Map来存储,键是课程名称,值是该课程的成绩。

  • 将把完成的工作放在Class类中。 类名:Class public Class(String name) 构造函数,name为班级名称;
  • public void addCourseGrade(String stuname,String []Coursenames,Integer[] grades) 增加学生及课程的数据,stuname 学生姓名,Coursenames多个课程名,grades对应的多个分数;
  • public void addCourseGrade(String stuname,String Coursename,Integer grade) 增加学生及课程的数据,stuname 学生姓名,Coursename课程名,grade对应的分数;
  • public void delStudent(String stuname) 删出一个学生,stuname学生姓名;
  • public void delStuCourse(String stuname,String Coursename) 删出一个学生的一门课程,stuname学生姓名,Coursename课程名;
  • public double getPerAvgStudent(String stuname)返回一个学生的所有课程的平均成绩,stuname学生姓名; ``
  • public double getClassAvgCourse(String Coursename) 返回一个班某门课程的平均成绩,如果该班有同学没选修该门课程,平均成绩不计算该同学,Coursename为课程名。

开始你的任务吧,祝你成功!

提示:

  1. 构造函数中的字符串是没用的,写代码时不需要过多纠结name是干啥的,只要加上就行了。
  2. 学生的HashMap需要封装成类(内部类)。
  3. 添加课程时不能把原有课程给覆盖了。

源码:

package step1;
import java.util.*;
//在此写Class类
public class Class {
    
    class Student{
        public  HashMap<String,Integer> courses=new HashMap<String, Integer>();//存储课程
    }
    
    private HashMap<String,Student> students; //存储学生
    
    
    public  Class(String name) {
        students=new HashMap<String,Student>();//不用关心name干啥
    }
    //添加多个课程
    public void addCourseGrade(String stuname,String []Coursenames,Integer[] grades) {
        Student a=null;
        for(String s:students.keySet()) {
            if(s.equals(stuname)) {
                a=students.get(stuname);
            }
        }
        if(a==null) {
            a=new Student();
        }
        for(int i=0;i<Coursenames.length;i++) {
            a.courses.put(Coursenames[i], grades[i]);
        }
        students.put(stuname, a);
    }
    //添加单个课程
    public void addCourseGrade(String stuname,String Coursename,Integer grade) {
        Student a=null;
        for(String s:students.keySet()) {
            if(s.equals(stuname)) {
                a=students.get(stuname);
            }
        }
        if(a==null) {
            a=new Student();
        }
        a.courses.put(Coursename, grade);
        students.put(stuname, a);
    }
    //删除学生
    public void delStudent(String stuname) {
        students.remove(stuname);
    }
    //删除课程
    public void delStuCourse(String stuname,String Coursename) {
        students.get(stuname).courses.remove(Coursename);
    }
    //得到学生的平均分
    public double getPerAvgStudent(String stuname) {
        double goal=0;
        for(Integer i:students.get(stuname).courses.values()) {
            goal+=i;
        }
        return goal/students.get(stuname).courses.size();
    }
    //得到课程的平均分
    public double getClassAvgCourse(String Coursename) {
        double goal=0;
        int number=0;
        for(Student s:students.values()) {
            for(String a:s.courses.keySet()) {
                if(a.equals(Coursename)) {
                    goal+=s.courses.get(Coursename);
                    number++;
                }
            }
        }
        return goal/number;
    }
}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 舒窈
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信