通过班级名称查询班级的代码错在哪

通过班级名称查询班级的代码错在哪

package studentProj;

/*
 * 学生类
 */
public class Student {
    private String stuNum;// 学号
    private String stuName;// 姓名
    private double math;// 数学成绩
    private double chinese;// 语文成绩
    // 创建构造方法

    public Student() {
        super();
    }

    public Student(String stuNum, String stuName) {
        super();
        this.stuNum = stuNum;
        this.stuName = stuName;
    }

    // 创建getter/setter
    public String getStuNum() {
        return stuNum;
    }

    public void setStuNum(String stuNum) {
        this.stuNum = stuNum;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public double getMath() {
        return math;
    }

    public void setMath(double math) {
        this.math = math;
    }

    public double getChinese() {
        return chinese;
    }

    public void setChinese(double chinese) {
        this.chinese = chinese;
    }

    // hashcode()和equals()方法
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(chinese);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(math);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        result = prime * result + ((stuName == null) ? 0 : stuName.hashCode());
        result = prime * result + ((stuNum == null) ? 0 : stuNum.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (this.getClass() == obj.getClass()) {
            Student student = (Student) obj;
            return (this.stuNum == student.stuNum) && (this.stuName == student.stuName);
        }
        return true;
    }


    // toString 方法
    @Override
    public String toString() {
        return "[学号:" + stuNum + ", 姓名:" + stuName + "]";
    }





}
package studentProj;

import java.util.ArrayList;
import java.util.List;

public class BanJi {
    private String classId;// 班级编号
    private String className;// 班级名称
    private List<Student> stuList;// 存放学生的集合
    // 1.构造方法

    public BanJi(String classId, String className) {
        super();
        this.classId = classId;
        this.className = className;
        stuList = new ArrayList<Student>();
    }

    // 2.创建getter/setter方法
    public String getClassId() {
        return classId;
    }

    public void setClassId(String classId) {
        this.classId = classId;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public List<Student> getStuList() {
        return stuList;
    }

    public void setStuList(List<Student> stuList) {
        this.stuList = stuList;
    }

    // 3.将学生信息添加到班级列表中
    public void addStudent(Student student) {
        boolean flag = false;
        for (Student stu : stuList) {
            if (student.equals(stu)) {
                flag = true;
            }
        }
        if (flag) {
            System.out.println("学生信息存在,请勿重复添加");
        } else {
            stuList.add(student);
            System.out.println("学生信息添加成功");
        }
    }

    // 4.通过学号查询学生在班级中是否存在
    public Student searchStudentByNum(String stuNum) {
        Student student = null;
        for (Student stu : stuList) {
            if (stu.getStuNum().equals(stuNum)) {
                student = stu;
            }
        }
//        if (student != null) {
//            System.out.println("删除的学生信息为:" + student);
//        } else {
//            System.out.println("查找学生不存在");
//        }
        return student;

    }

    // 5.输入班级学生的语文成绩
    public void insertChineseScore(String stuNum, float score) {
        for (Student stu : stuList) {
            if (stu.getStuNum().equals(stuNum)) {
                stu.setChinese(score);
                System.out.println(stu.getStuName() + "语文成绩添加成功");

            } else {
                System.out.println("该学生不存在");
            }
        }
//        System.out.println("语文成绩添加完毕");
    }

    // 6.输入班级学生的数学成绩
    public void insertMathScore(String stuNum, float score) {
        for (Student stu : stuList) {
            if (stu.getStuNum().equals(stuNum)) {
                stu.setMath(score);
                System.out.println(stu.getStuName() + "数学成绩添加成功");
            } else {
                System.out.println("该学生不存在");
            }
        }
//        System.out.println("数学成绩添加完毕");
    }

    // 7.删除学生信息
    public void deleteStudent(String stuNum) {
        Student student = searchStudentByNum(stuNum);
        if (student == null) {
            System.out.println("要删除的学生信息不存在");
        } else {
            stuList.remove(student);
            System.out.println("删除成功");
        }

    }

    // 显示所有学生的信息(包括学号和姓名)
    public void displayAllStudent() {
        System.out.println(this.getClassName() + "所有学生信息如下:");
        for (Student stu : stuList) {
            System.out.println(stu.toString());
        }
    }

}

package studentProj;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class School {
    Map<String, BanJi> schoolMap;

    // 1.创建构造方法
    public School() {
        super();
        schoolMap = new HashMap<String, BanJi>();
    }

    // 2.setter/getter方法
    public Map<String, BanJi> getSchoolMap() {
        return schoolMap;
    }

    public void setSchoolMap(Map<String, BanJi> schoolMap) {
        this.schoolMap = schoolMap;
    }

    // 3.添加班级
    public void addBanJi(BanJi banji) {
        boolean flag = true;
        Set<String> classSet = schoolMap.keySet();
        for (String name : classSet) {
            if (banji.getClassName().equals(name)) {
                System.out.println("班级["+banji.getClassName()+"]已经存在,请勿重复添加");
                flag=false;
                break;
            }
        }
        if (flag) {
            schoolMap.put(banji.getClassName(), banji);
            System.out.println(banji.getClassName() + "添加成功");
        }

    }

    // 4.删除班级
    public void deleteBanJi(BanJi banji) {
        BanJi bj=null;
        Set<String> classSet = schoolMap.keySet();
        for(String name:classSet) {
            if(banji.getClassName().equals(name)) {
                bj=this.searchByName(name);
            }
        }
        if(bj!=null) {
        schoolMap.remove(banji.getClassId());
        System.out.println("["+banji.getClassName()+"]" + "删除成功");
        }else {
            System.out.println("删除失败!未找到["+banji.getClassName()+"]");
        }
    }

    // 5.通过班级名称查询班级
    public BanJi searchByName(String className) {
        BanJi bj = null;
//        Set<String> classSet = schoolMap.keySet();
        Set<String> classSet = schoolMap.keySet();
        if (classSet != null) {// 判断集合里是否有值
            for (String name : classSet) {
                if (name.equals(className)) {
                    bj = schoolMap.get(name);
                    break;
                }
            }
        } else {
            System.out.println("集合里没有班级");
        }
        System.out.println(bj.getClassName());
        return bj;
    }
    //6.对个班语文成绩平均分进行由大到小排序
    public void sortChineseByAverage() {
        List <BanJi>bjList=new ArrayList<BanJi>();//创建存储班级的数组
//        double [] sumChinese=new double[100];//将各个班级的成绩存入到数组中
        for(BanJi bj:schoolMap.values()) {
            bjList.add(bj);//将班级集合中的班级存入到List数组中
        }
//        double [] sumChinese=new double[bjList.size()];//将各个班级的成绩存入到数组中
        Map<String,Double> classChineseMap=new HashMap<String,Double>();
        //求个个班的语文总成绩,并将其存入到sunChinese数组中
        for(int i=0;i<bjList.size();i++) {
            
            double sum=0;
            List<Student>stuList=bjList.get(i).getStuList();
//            System.out.println(stuList.size());
            for(int j=0;j<stuList.size();j++) {
                sum+=stuList.get(j).getChinese();
                
//                if(stuList.get(j).getChinese()>stuList.get(j+1).getChinese()) {
//                    Student stu=stuList.get(j+1);
//                    stuList.add(j+1, stuList.get(j));
//                    stuList.add(j,stu);
//                }
            }
//            sumChinese[i]=sum;
            classChineseMap.put(bjList.get(i).getClassName(),sum/stuList.size());
            System.out.println(bjList.get(i).getClassName()+"的语文总成绩为"+sum);
        }
        //输出排序后的语文成绩
            //将map的entry存入到list数组中
        List <Map.Entry<String, Double>> list=new ArrayList<Map.Entry<String, Double>>(classChineseMap.entrySet());
            //按照map的value值进行排序
         Collections.sort(list, new Comparator<Map.Entry<String, Double>>()
         {
                // 降序排序
                @Override
                public int compare(Entry<String, Double> o1, Entry<String, Double> o2) {
                    // return o1.getValue().compareTo(o2.getValue());
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
             for(Map.Entry<String, Double> mapping:list) {
                 System.out.println(mapping.getKey()+":"+mapping.getValue());
             }
    }    
    //7.对每个班的数学平均成绩进行降序排列
    public void sortMathByAverage() {
        List <BanJi>bjList=new ArrayList<BanJi>();//创建存储班级的数组
//        double [] sumChinese=new double[100];//将各个班级的成绩存入到数组中
        for(BanJi bj:schoolMap.values()) {
            bjList.add(bj);//将班级集合中的班级存入到List数组中
        }
//        double [] sumChinese=new double[bjList.size()];//将各个班级的成绩存入到数组中
        Map<String,Double> classMathMap=new HashMap<String,Double>();
        //求个个班的语文总成绩,并将其存入到sunChinese数组中
        for(int i=0;i<bjList.size();i++) {
            
            double sum=0;
            List<Student>stuList=bjList.get(i).getStuList();
//            System.out.println(stuList.size());
            for(int j=0;j<stuList.size();j++) {
                sum+=stuList.get(j).getMath();
                
//                if(stuList.get(j).getChinese()>stuList.get(j+1).getChinese()) {
//                    Student stu=stuList.get(j+1);
//                    stuList.add(j+1, stuList.get(j));
//                    stuList.add(j,stu);
//                }
            }
//            sumChinese[i]=sum;
            classMathMap.put(bjList.get(i).getClassName(),sum/stuList.size());
        }
        //输出排序后的数学成绩
            //将map的entry存入到list数组中
        List <Map.Entry<String, Double>> list=new ArrayList<Map.Entry<String, Double>>(classMathMap.entrySet());
            //按照map的value值进行排序
         Collections.sort(list, new Comparator<Map.Entry<String, Double>>()
         {
                // 降序排序
                @Override
                public int compare(Entry<String, Double> o1, Entry<String, Double> o2) {
                    // return o1.getValue().compareTo(o2.getValue());
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
             for(Map.Entry<String, Double> mapping:list) {
                 System.out.println(mapping.getKey()+":"+mapping.getValue());
             }
    }    
}

package studentProj;

import java.util.Scanner;

public class TestDemo {
    // 学生类测试
    public void testStudent() {
        Student student1 = new Student("S01", "小明");
        Student student2 = new Student("S02", "小王");
        Student student3 = new Student("S01", "小明");
        System.out.println(student1);
        System.out.println(student2);
        System.out.println(student3);
        System.out.println(student1.equals(student2));
        System.out.println(student1.equals(student3));
        System.out.println(student1 == student3);
    }

    // 班级类测试
    public void testBanJi() {
        BanJi banji = new BanJi("b01", "二班");
        Student student1 = new Student("S01", "小明");
        Student student2 = new Student("S02", "小王");
        Student student3 = new Student("S01", "小明");
        banji.addStudent(student1);
        banji.addStudent(student2);
        banji.addStudent(student3);
        // 测试通过学号查询学生
        banji.searchStudentByNum("S01");
        banji.searchStudentByNum("S033");
    }

    // 插入语文/数学成绩测试
    public void insertScore() {
        BanJi banji = new BanJi("b01", "二班");
        Student student1 = new Student("S01", "小明");
        banji.addStudent(student1);
        banji.insertChineseScore("S01", 55.6f);
        banji.insertMathScore("S01", 15.6f);
        banji.insertMathScore("S012", 15.6f);

    }

    public void deleteStudnet() {
        BanJi banji = new BanJi("b01", "二班");
        Student student1 = new Student("S01", "小明");
        Student student2 = new Student("S02", "小明2");
        banji.addStudent(student1);
        banji.addStudent(student2);
        banji.displayAllStudent();
        banji.deleteStudent("S01");
        banji.displayAllStudent();
    }

    // 学校类测试
    public void schoolTest() {
//        School school=new School();
//        BanJi banji = new BanJi("b01", "二班");
//        BanJi banji1 = new BanJi("b01", "二1班");
//        school.addBanJi(banji);
//        school.addBanJi(banji);
//        school.searchByName("二班");
////        System.out.println(school.searchByName("二班")!=null);
//        school.deleteBanJi(banji);
//        school.deleteBanJi(banji1);
        // 测试成绩排序
        School school = new School();
        BanJi banji1 = new BanJi("b01", "1班");
        BanJi banji2 = new BanJi("b02", "2班");
        BanJi banji3 = new BanJi("b03", "3班");
        school.addBanJi(banji1);
        school.addBanJi(banji2);
        school.addBanJi(banji3);
        Student student1 = new Student("S01", "小明");
        student1.setChinese(10.0);
        student1.setMath(10.0);
        Student student2 = new Student("S02", "小明2");
        student2.setChinese(22.0);
        student2.setMath(10.0);
        Student student3 = new Student("S03", "小明3");
        student3.setChinese(33.0);
        student3.setMath(10.0);
        Student student4 = new Student("S04", "小明4");
        student4.setChinese(40.0);
        student4.setMath(10.0);
        Student student5 = new Student("S05", "小明5");
        student5.setChinese(50.0);
        student5.setMath(10.0);
        Student student6 = new Student("S06", "小明6");
        student6.setChinese(60.0);
        student6.setMath(10.0);
        Student student7 = new Student("S07", "小明7");
        student7.setChinese(80.0);
        student7.setMath(10.0);
        banji1.addStudent(student1);
        banji1.addStudent(student2);
        banji1.addStudent(student3);
        banji2.addStudent(student4);
        banji2.addStudent(student5);
        banji3.addStudent(student6);
        banji3.addStudent(student7);
//        school.sortChineseByAverage();
        school.sortMathByAverage();
        school.searchByName("b01");
    }

    public void mainMenu() {
        System.out.println("*********主菜单*********");
        System.out.println("1--班级管理");
        System.out.println("2--学校管理");
        System.out.println("0--退出");
        System.out.println("************************");

    }

    public void banJiMenu() {
        System.out.println("*******班级管理*********");
        System.out.println("1-添加学生信息到主学生列表");
        System.out.println("2-添加学生信息到普通班级列表");
        System.out.println("3-通过学号查询学生信息");
        System.out.println("4-输入班级的语文成绩");
        System.out.println("5-输入班级的数学成绩");
        System.out.println("6-删除学生信息");
        System.out.println("7-显示所有学生信息");
        System.out.println("0-返回上一级");
        System.out.println("************************");
    }

    public void schoolMenu() {
        System.out.println("********学校管理********");
        System.out.println("1-创建班级");
        System.out.println("2-删除班级");
        System.out.println("3-通过班级名称查询同班级信息");
        System.out.println("4-对各个班级的语文成绩降序排列");
        System.out.println("5-对各个班级的数学成绩降序排列");
        System.out.println("6-显示所有班级名称");
        System.out.println("0-返回上一级");
        System.out.println("************************");
    }

    public void test() {
        TestDemo test = new TestDemo();

//        boolean flag=true;
        while (true) {
            // 主菜单
            test.mainMenu();
            BanJi mainStudent = new BanJi("S01", "主学生列表");// 创建主学生列表
            BanJi commonStudent; // 创建普通学生列表
            School school = new School();
            school.addBanJi(mainStudent);
            System.out.println("请输入相应的数字进行操作");
            Scanner sc = new Scanner(System.in);
            int n = 0;
            try {
                n = sc.nextInt();
            } catch (java.util.InputMismatchException e) {
                System.out.println("请输入数字格式进行操作");
//                continue;
            }
            if (n == 0) {
                System.out.println("退出程序成功");
                break;
            }
            switch (n) {
            case 1:
                // 班级管理
//                boolean flag = true;
                while (true) {
                    test.banJiMenu();
                    sc = new Scanner(System.in);
                    try {
                        n = sc.nextInt();
                    } catch (java.util.InputMismatchException e) {
                        System.out.println("请输入数字格式进行操作");
                        continue;
                    }
                    if (n == 0) {
                        System.out.println("退出程序成功");
                        break;
                    }
                    // 班级管理的具体内容
                    switch (n) {
                    case 1:// 添加学生信息到主学生列表
                        boolean flag = true;
                        while (flag) {
                            boolean flag2 = true;
                            System.out.println("请输入学生学号");
                            String stuId = sc.next();
                            System.out.println("请输入学生姓名");
                            String stuName = sc.next();
                            Student stu = new Student(stuId, stuName);
                            if (mainStudent.searchStudentByNum(stuId) != null) {
                                System.out.println("该学生信息已存在请勿重复添加");

                            } else {
                                mainStudent.addStudent(stu);
                            }
                            while (flag2) {
                                System.out.println("请输入相应的数字(1/0)(继续添加/结束添加)");
                                try {
                                    n = sc.nextInt();
                                } catch (java.util.InputMismatchException e) {
                                    System.out.println("请输入数字格式进行操作");
                                    sc.next();// 释放键盘值不然死循环
                                    continue;
                                }
                                switch (n) {
                                case 0:
                                    flag = false;
                                    flag2 = false;
                                    break;
                                case 1:
                                    flag = true;
                                    flag2 = false;
                                    break;
                                default:
                                    System.out.println("请输入0/1");
                                    flag = true;
                                    flag2 = true;
                                    break;
                                }
                            }
                        }
                        break;
                    case 2://添加学生信息到普通班级列表
                        boolean flag3 = true;
                        while (flag3) {
                            boolean flag2 = true;
                            System.out.println("请输入要添加到的班级列表名称");
                            String className=sc.next();
                            commonStudent=school.searchByName(className);
                            if(commonStudent==null) {
                                System.out.println("班级列表不存在,请先添加");
                                break;
                            }else {
                                System.out.println("请输入学生学号");
                                String stuId = sc.next();
                                System.out.println("请输入学生姓名");
                                String stuName = sc.next();
                                Student stu = new Student(stuId, stuName);
                                if (commonStudent.searchStudentByNum(stuId) != null) {
                                    System.out.println("该学生信息已存在请勿重复添加");
                                    break;

                                } else {
                                    if(mainStudent.searchStudentByNum(stuId) != null) {
                                        commonStudent.addStudent(stu);
                                    }else {
                                        mainStudent.addStudent(stu);
                                        commonStudent.addStudent(stu);
                                    }
                                    
                                }
                                while (flag2) {
                                    System.out.println("请输入相应的数字(1/0)(继续添加/结束添加)");
                                    try {
                                        n = sc.nextInt();
                                    } catch (java.util.InputMismatchException e) {
                                        System.out.println("请输入数字格式进行操作");
                                        sc.next();// 释放键盘值不然死循环
                                        continue;
                                    }
                                    switch (n) {
                                    case 0:
                                        flag3 = false;
                                        flag2 = false;
                                        break;
                                    case 1:
                                        flag3 = true;
                                        flag2 = false;
                                        break;
                                    default:
                                        System.out.println("请输入0/1");
                                        flag3 = true;
                                        flag2 = true;
                                        break;
                                    }
                                }
                            }
                            }
                            
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    case 5:
                        break;
                    case 6:
                        break;
                    case 7:
                        break;
                    default:
                        flag = true;
                        System.out.println("------------------------");
                        System.out.println("请输入正确的数字进行操作!");
                        System.out.println("------------------------");
                        break;
                    }
                }
                break;
            case 2:
                // 学校管理
                boolean flag2 = true;
                while (true) {
                    test.schoolMenu();
                    sc = new Scanner(System.in);
                    try {
                        n = sc.nextInt();
                    } catch (java.util.InputMismatchException e) {
                        System.out.println("请输入数字格式进行操作");
                        continue;
                    }
                    if (n == 0) {
                        System.out.println("退出程序成功");
                        break;
                    }
                    switch (n) {
                    case 1:// 创建班级
                        System.out.println("请输入班级id");
                        String classId = sc.next();
                        System.out.println("请输入班级名称");
                        String className = sc.next();
                        BanJi banji = new BanJi(classId, className);
                        school.addBanJi(banji);
//                        flag = false;
                        break;
                    case 2:// 删除班级
                        System.out.println("请输入要删除的班级名称");
                        String deleteClassName = sc.next();
                        if (deleteClassName.equals(mainStudent.getClassName())) {
                            System.out.println("主学生列表不能删除");
                            break;
                        } else {
                            if (school.searchByName(deleteClassName) == null) {
                                System.out.println("要删除的班级不存在");
                            } else {
                                school.deleteBanJi(school.searchByName(deleteClassName));
                            }
                        }

                        break;
                    case 3:
                        System.out.println("输入要查询班级的名称");
                        String searchClassName = sc.next();
                        if (school.searchByName(searchClassName) == null) {
                            System.out.println("要查询的班级信息不存在");
                        } else {
                            BanJi bj = school.searchByName(searchClassName);
                            if (bj.getStuList().size() == 0) {
                                System.out.println("该班级没有学生信息");
                            } else {
                                bj.displayAllStudent();
                            }

                        }
                        break;
                    case 4:
                        school.sortChineseByAverage();
                        break;
                    case 5:
                        school.sortMathByAverage();
                        break;
                    case 6:// 展示所有班级名称
                        if (school.getSchoolMap().values().size() == 0) {
                            System.out.println("班级列表为空,请先添加班级");
                            break;
                        }
                        for (BanJi bj : school.schoolMap.values()) {
                            System.out.println("班级Id:" + bj.getClassId() + "班级名称:" + bj.getClassName());
                        }
                        break;
                    default:
//                        flag = true;
                        System.out.println("------------------------");
                        System.out.println("请输入正确的数字进行操作!");
                        System.out.println("------------------------");
                        break;
                    }
                }

                break;
            default:
                System.out.println("------------------------");
                System.out.println("请输入正确的数字进行操作!");
                System.out.println("------------------------");
                break;
            }

        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestDemo test = new TestDemo();
//        test.testStudent();//学生类测试
//        test.testBanJi();//班级类测试
//        test.insertScore();//插入成绩测试
//        test.deleteStudnet();// 删除测试
 //       test.schoolTest();
//        test.mainMenu();
        test.test();
    }

}

通过班级名称查询同班级信息。输入班级名称后查询不到班级的存在。班级已经创建了。http://img1.sycdn.imooc.com//climg/5da54c1a097a39fd07850388.jpgbj总是返回空

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕柯南 2019-10-15 17:24:39

同学你好,

  1. 出错的原因是因为同学每次循环都会重新new 一个school对象,导致之前的数据消失了

    http://img1.sycdn.imooc.com//climg/5da5902a091c1ee406420342.jpg

  2. 同学将这些信息放在循环外就可以了

    http://img1.sycdn.imooc.com//climg/5da590470926573d07460292.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


提问者 一个小渔民 2019-10-15 13:08:49

明明添加了班级,添加学生信息的时候却找不到

http://img1.sycdn.imooc.com//climg/5da5540f095fde7804070418.jpg

http://img1.sycdn.imooc.com//climg/5da55410096447fb04870407.jpg

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师