4-8作业关于平均成绩的问题

4-8作业关于平均成绩的问题

1
package com.imooc.student.homework;<br><br>public class Student {<br>   // 学生类,定义属性<br> private String stuNum;// 学号<br> private String stuName;// 学生名字<br>  private float math;// 数学<br>    private float chinese;// 语文<br><br> public Student(String stuNum, String stuName) {<br>     this.stuNum = stuNum;<br>       this.stuName = stuName;<br> }<br><br>   public Student(String stuNum, String stuName, float math, float chinese) {<br>      this.stuNum = stuNum;<br>       this.stuName = stuName;<br>     this.math = math;<br>       this.chinese = chinese;<br> }<br><br>   public String getStuNum() {<br>     return stuNum;<br>  }<br><br>   public void setStuNum(String stuNum) {<br>      this.stuNum = stuNum;<br>   }<br><br>   public String getStuName() {<br>        return stuName;<br> }<br><br>   public void setStuName(String stuName) {<br>        this.stuName = stuName;<br> }<br><br>   public float getMath() {<br>        return math;<br>    }<br><br>   public void setMath(float math) {<br>       this.math = math;<br>   }<br><br>   public float getChinese() {<br>     return chinese;<br> }<br><br>   public void setChinese(float chinese) {<br>     this.chinese = chinese;<br> }<br><br>   @Override<br>   public int hashCode() {<br>     final int prime = 31;<br>       int result = 1;<br>     result = prime * result + Float.floatToIntBits(chinese);<br>        result = prime * result + Float.floatToIntBits(math);<br>       result = prime * result + ((stuName == null) ? 0 : stuName.hashCode());<br>     result = prime * result + ((stuNum == null) ? 0 : stuNum.hashCode());<br>       return result;<br>  }<br><br>   @Override<br>   public boolean equals(Object obj) {<br>     // 判断对象是否相等,如果相同返回true;<br>     if (this == obj) {<br>          return true;<br>        }<br>       // this!=obj,进行判断<br>       if (obj.getClass() == Student.class) {<br>          Student str = (Student) obj;<br>            return str.getStuNum().equals(stuNum) && str.getStuName().equals(stuName);<br>      }<br>       return false;<br>   }<br><br>   @Override<br>   public String toString() {<br>      return "学生信息: [学号:" + stuNum + ", 姓名:" + stuName + "]";<br> }<br><br><br>}<br>
1
package com.imooc.student.homework;<br><br>import java.util.ArrayList;<br>import java.util.Iterator;<br>import java.util.List;<br><br>public class Banji {<br>  //班级类<br>   private String classId; //班级编号<br>  private String className;//班级名称<br> private List<Student> stuList; //存放学生的集合,也就是班级内学生的信息;<br><br> //构造方法<br><br>  public Banji() {<br>        stuList=new ArrayList<Student>();<br> }<br>   public Banji(String className) {<br>        this.className = className;<br>     stuList=new ArrayList<Student>();<br>     }<br><br>   public Banji(String classId,String className) {<br>     this.classId=classId;<br>       this.className=className;<br>       stuList=new ArrayList<Student>();     <br>    }<br>   //get/set方法<br><br> public String getClassId() {<br>        return classId;<br> }<br><br>   public void setClassId(String classId) {<br>        this.classId = classId;<br> }<br><br>   public String getClassName() {<br>      return className;<br>   }<br><br>   public void setClassName(String className) {<br>        this.className = className;<br> }<br><br>   public List<Student> getStuList() {<br>       return stuList;<br> }<br><br>   public void setStuList(List<Student> stuList) {<br>       this.stuList = stuList;<br> }<br>   /**<br>  * 将学生添加到班级中<br>     * @param stu 学生对象的信息<br>    */<br> public void addStudent(Student stu) {<br>       //排除重复添加情况<br>      //判断该学生是否存在<br>     boolean flag=false;<br>     for(Student s:stuList) {<br>            if(s.getStuNum().equals(stu.getStuNum())) { //对象进行比较,如果已存在<br>              flag=true;<br>              break; //返回true,无需添加<br>            }<br>       }<br>       if(flag) {<br>          System.out.println("学生信息已存在,添加失败!");<br>        }else {<br>         stuList.add(stu);<br><br>       }<br>   }//添加学生方法结束!<br><br>    /**<br>  * 通过学号查询学生在班级中是否存在<br>  * @param stuNum 学生的学号<br>   * @return  查到的学生的信息<br>     */<br> public Student searchStudentByNum(String stuNum) {<br>      //定义一个Student 的对象,接收信息<br>      Student str=null;<br>       //stuNum是唯一的,所以先进行遍历查询<br>      for(Student s:stuList) {<br>            //进行判断是否一致<br>          if(s.getStuNum().equals(stuNum)){//如果一致则证明查询到了此学生在班级中存在<br>         str=s;<br>          break;<br>          }<br>       }<br>       return str;<br> }//通过学号查询是否在班级存在方法 结束!<br><br>  /**<br>  * 输入班级学生的语文成绩<br>   * @param stuNum 学生的学号<br>   * @param score 学生的成绩<br>    */<br> public void insertChineseScore(String stuNum,float score) {<br>     //进行学生信息遍历,通过id查询到学生<br>        for(Student s:stuList) {<br>            if(s.getStuNum().equals(stuNum)){//判断学生学号是否一致,如一致进行赋值<br>               s.setChinese(score);<br>                System.out.println("添加语文成绩成功!");<br>                break;<br>          }       <br>        }<br>   }   // 添加语文成绩方法结束!<br><br>  /**<br>  * 输入班级学生的数学成绩<br>   * @param stuNum 学生的学号<br>   * @param score 学生的数学成绩<br>  */<br> public void insertMathScore(String stuNum,float score) {<br>        //进行学生信息遍历,然后通过学号查询到学生进行判断<br>      for(Student s:stuList) {<br>            //进行判断<br>          if(s.getStuNum().equals(stuNum)) {<br>              //如果传入学生的学号信息和当前s学生信息相同,则进行赋值<br>               s.setMath(score);<br>               System.out.println("添加数学成绩成功!");<br>                break;<br>          }<br>       }<br>   }//添加数学成绩方法结束!<br><br>  /**<br>  * 通过学号删除学生信息 <br>   * @param stuNum 学生学号<br>    */<br> public void deleteStudent(String stuNum) {<br>      Student stu=null;<br>       //通过遍历查询学生信息,然后通过学号确定信息是否一致,<br>        for(Student s:stuList) {<br>            if(s.getStuNum().equals(stuNum)) {<br>              stu=s;//如一致进行删除;<br>                stuList.remove(stu);<br>            }else {<br>             System.out.println("没有找到该学生的信息,删除失败!");<br>         }<br>       }<br>   }//删除学生信息方法结束!<br><br>  /**<br>  * 显示所有学生信息<br>  */<br> public void displayAllStudent() {<br>       Iterator<Student> it=stuList.iterator();<br>      while(it.hasNext()) {<br>           System.out.println(it.next());<br>      }<br>   }<br>   public String toString() {<br><br>      return "班级信息: [班级编号:" + classId + ", 班级名称:" + className + "]";<br><br>      }<br><br><br><br><br><br><br>}<br>
1
package com.imooc.student.homework;<br><br>import java.util.ArrayList;<br>import java.util.Collections;<br>import java.util.Comparator;<br>import java.util.HashMap;<br>import java.util.Iterator;<br>import java.util.List;<br>import java.util.Map;<br>import java.util.Map.Entry;<br>import java.util.Set;<br><br>public class School {<br>  //存放班级的集合,key :班级的名称,value:班级内学生的信息<br> Map<String,Banji> schoolMap;<br>  //构造方法:<br> public School() {<br>       schoolMap=new HashMap<String,Banji>();<br>    }<br>   //get/set方法<br> public Map<String, Banji> getSchoolMap() {<br>        return schoolMap;<br>   }<br>   public void setSchoolMap(Map<String, Banji> schoolMap) {<br>      this.schoolMap = schoolMap;<br> }<br><br>   /**<br>  * 添加班级<br>  * @param banji 要添加的班级信息<br>     */<br> public void addBanji(Banji banji) {<br>     //key :班级的名称;value :班级内学生的信息<br>        schoolMap.put(banji.getClassName(), banji);<br> }//添加班级方法结束<br><br> /**<br>  * 删除班级<br>  * @param banji 要删除班级的信息<br>     */<br> public void deleteBanji(Banji banji) {<br>      //要排除重复添加的情况<br>        boolean flag=false;//判断班级信息是否存在<br>     //取出所有班级名称<br>      Set<String> set=schoolMap.keySet();<br>       //进行循环查询,并判断<br>        for(String s:set) {<br>         if(banji.getClassName().equals(s)) {<br>                flag=true;break;<br>            }<br>       }<br>       if(flag) {<br>          //如果为true进行删除,<br>          schoolMap.remove(banji.getClassName());<br>         System.out.println("删除成功!");<br>        }else {<br>         System.out.println("该班级不存在");<br>       }<br>//     //通过key值去删除班级的信息;<br>//     schoolMap.remove(banji.getClassId());<br>//     //提示语句:<br>//       System.out.println("删除成功!");<br>    }//删除班级方法结束<br><br> /**<br>  * 通过班级名称查询班级信息 <br>     * @param className 班级名称 <br>    * @return 查询到的班级信息<br>  */<br> public Banji searchByName(String className) {<br>       //创建一个banji的对象为null值,用来接收数据,方法1:<br>        Banji banji=null;<br>//     //通过Map集合把所有key值赋值给 Set集合;<br>//         Set<String>banjiSet=schoolMap.keySet();<br>//         //通过增强循环,查询key值信息是否一致,如一致进行取出key值,<br>//         for(String s:banjiSet) {<br>//             if(s.equals(className)) {<br>//                 //通过key值查询Value值,也就是通过班级名称,查询班级内部学生信息<br>//                 banji=schoolMap.get(s);<br>//           }<br>//         }<br>         //方法2:通过迭代器方法,因为Map没有迭代器方法,所有通过keySet方法的返回调用iterator方法;<br>         Iterator<String> it=schoolMap.keySet().iterator();<br>         while(it.hasNext()) {<br>            //把查询到的key值赋值给key对象;<br>            String key=it.next();<br>           //继续内容判断 ,当前key的信息与传进来的className进行是否一致,如一致就是查到了;<br>            if(key.equals(className)) {<br>                 banji=schoolMap.get(key);<br>           }<br><br><br>         }<br>         return banji;<br>  }//通过班级名称查询班级信息方法结束<br><br> /**<br>  * 对各班语文成绩平均分进行倒序排序,也就是又大到小<br>  */<br> public void sortChineseByAverage() {<br>        //创建Map集合,把key-班级名称,和value-成绩存放Map集合<br>        Map<String,Float>scoreMap=new HashMap<String,Float>();<br>      //取出所有班级名称列表,并赋值给 新对象scoreList;<br>     Set<String> scoreList=schoolMap.keySet();<br>     //用来接收班级名称信息;<br>       Banji bj=null;<br>      //进行遍历班级名称,并判断班级是否存在<br>        for(String s:scoreList) {<br>           if(s.equals("主学生列表")) { //平均成绩只对班级有效,主学生列表包含所有学生,所有跳出循环<br>             continue;<br>           //把查询到的班级名称存放到bj对象中;    <br>            } bj=this.searchByName(s);<br>          //对bj信息进行判断<br>         if(bj==null) {<br>              System.out.println("班级不存在!");<br>           }else {//进行成绩存放,<br>                float sum=0.0f; //成绩和<br>               int i=0; //学生人数<br>             //获取每个班级学生信息;<br>             List<Student> listStudent=bj.getStuList();<br>            //用迭代器遍历所有学生信息<br>              Iterator<Student> it=listStudent.iterator();<br>              while(it.hasNext()) {<br>               i++; //每判断还有下一个信息,学生人数+1;<br>              sum+=it.next().getChinese();//成绩和,调用查询到的学生信息然后在调用成绩方法,<br>           }<br>           //获取平均分<br>             float ave=sum/i;<br>            //把平均分添加到Map集合中,班级名称为key值;<br>              scoreMap.put(s, ave);<br>         }<br>       }<br>       //将scoreMap中的每个key-value存放到List集合中进行排序,entrySet方法获取所有键值信息;<br>      List<Map.Entry<String,Float>> list=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());<br>     //对List集合进行排序,并且通过匿名内部类实现排序;<br>        Collections.sort(list, new Comparator<Map.Entry<String,Float>>(){<br>           public int compare(Entry<String,Float> o1,Entry<String,Float>o2) {<br>              return o2.getValue().compareTo(o1.getValue());<br>          }<br>       });<br>     //提示语句<br>      System.out.println("排序后的数据为:");<br>     //把list中所有学生的信息 存放到Map.Entry集合中<br>     for(Map.Entry<String,Float> s:list) {<br>         System.out.println(s.getKey()+"的平均分"+s.getValue());<br>     }<br>   }//语文成绩排序方法结束<br><br>   /**<br>  * 对各班数学成绩进行降序,也就是从大到小排序;<br>    */<br> public void sortMathByAverage() {<br>       //创建Map集合,把key-班级名称,和value-成绩存放Map集合<br>        Map<String,Float>scoreMap=new HashMap<String,Float>();<br>      //取出所有班级信息,并赋值给 新对象scoreList;<br>       Set<String>scoreList=schoolMap.keySet();<br>      //用来接收班级名称信息;<br>       Banji bj=null;<br>      //进行遍历班级名称,并判断班级是否存在<br>        for(String s:scoreList) {<br>           if(s.equals("主学生列表")) {//平均成绩只对存在的班级有效,主学生列表包含所有学生,所有跳出循环<br>               continue;<br>               //把查询到的班级名称存放到bj对象中;<br>            }   bj=this.searchByName(s);<br>               //对bj信息进行判断<br>          if(bj==null) {<br>              System.out.println("班级不存在!");<br>           }else {//进行成绩存放,<br>                float sum=0.0f; //成绩<br>                int i=0;//学生人数<br>              //获取每个班级学生信息,并存放到List,新对象中  <br>                List<Student> listStudent=bj.getStuList();<br>                //通过迭代器输出所有学生信息;<br>                Iterator<Student> it=listStudent.iterator();<br>              while(it.hasNext()) {<br>                   i++;<br>                    sum+=it.next().getChinese();<br>                }<br>                 //获取平均分<br>               float ave=sum/i;<br>                 //把平均分添加到Map集合中,班级名称为key值;<br>             scoreMap.put(s, ave);<br>           }<br>       }<br>           //将scoreMap中的每个key-value存放到List集合中进行排序,entrySet方法获取所有键值信息;<br>          List<Map.Entry<String, Float>> list=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());<br>            //对List集合进行排序,并且通过匿名内部类实现排序;<br>            Collections.sort(list, new Comparator<Map.Entry<String, Float>>() {<br>             public int compare(Map.Entry<String, Float>o1,Map.Entry<String, Float>o2) {<br>                 return o2.getValue().compareTo(o1.getValue());<br>              }<br>           });<br>         //提示语句<br>          System.out.println("排序后的数据为:");<br>         //把list中所有学生的信息 存放到Map.Entry集合中<br>         for(Map.Entry<String, Float> s:list) {<br>                System.out.println(s.getKey()+"的平均分"+s.getValue());<br>         }<br>   }//数学成绩排序方法结束<br><br>   /**<br>  * 显示所有班级名称<br>  */<br> public void displayBanjiName() {<br>        //先取出所有班级名称信息<br>       String key=null;<br>        Set<String> set=schoolMap.keySet();<br>       for(String s:set) {<br>         key=s;<br>          System.out.println(key);<br>        }<br><br>       //通过迭代器方法<br>//     Iterator<Banji> it=schoolMap.values().iterator();<br>//       while(it.hasNext()) {<br>//         System.out.println(it.next().getClassName());<br>//     }<br>   }//显示所有班级名称方法结束<br>}<br>

测试类:

1
package com.imooc.student.homework;<br><br>import java.util.InputMismatchException;<br>import java.util.List;<br>import java.util.Scanner;<br><br>public class TestDemo {<br><br>  /**<br>  * 班级的测试方法<br>   */<br> public void testBanji() {<br>       //实例化创建对象<br>       Student stu1=new Student("soo1","张三");<br>      Student stu2=new Student("soo2","李四");<br>      Student stu3=new Student("soo3","王五");<br>      Student stu4=new Student("soo1","张四");<br>      Banji bj=new Banji("soo1","一班");<br>        //测试1:将学生添加到班级中<br>     bj.addStudent(stu1);<br>        bj.addStudent(stu2);<br>        bj.addStudent(stu3);<br>        //重复添加学生到班级中<br>        bj.addStudent(stu4);<br>//      显示所有班级的信息<br>       bj.displayAllStudent();<br>     //测试通过学号查询学生信息<br>      System.out.println("通过学号查询学生信息:");<br>      System.out.println(bj.searchStudentByNum("soo1"));<br><br>      //输入班级的语文数学成绩测试<br>     bj.insertChineseScore("soo1", 80);<br>      System.out.println(stu1+"的语文成绩为:"+stu1.getChinese());<br>       //测试删除学生信息<br>      bj.deleteStudent("soo2");<br>       System.out.println("删除后的信息为:");<br>     bj.displayAllStudent();<br> }<br><br>    /**<br>    * 学校的测试方法<br>    */<br> public void testSchool() {<br>      //添加班级<br>      Student stu1=new Student("s001","张三");<br>      Student stu2=new Student("s002","李四");<br>      Student stu3=new Student("s003","王五");<br>      Banji bj=new Banji("s0001","三班");<br>       bj.addStudent(stu1);<br>        bj.addStudent(stu2);<br>        bj.addStudent(stu3);<br>          bj.insertChineseScore("s001", 80);<br>           bj.insertChineseScore("s002",70);<br>           bj.insertChineseScore("s003", 60);<br>       School sc=new School();<br>     sc.addBanji(bj);<br>        //添加普通班级信息,并从主学生列表读取信息<br>      Banji bj1=new Banji("s0002","一班");<br>      bj1.addStudent(bj.getStuList().get(0));<br>     bj1.addStudent(bj.getStuList().get(1));<br>     bj1.addStudent(bj.getStuList().get(2));<br>     sc.addBanji(bj1);<br>       System.out.println("显示所有班级信息:");<br>        sc.displayBanjiName();<br>      //删除班级<br>      sc.deleteBanji(bj1);<br>        System.out.println("删除后班级信息为:");<br>        sc.displayBanjiName();<br>      //通过班级名称查询班级<br>       System.out.println(sc.searchByName("主学生列表"));<br>       System.out.println(sc.searchByName("一班"));<br>      //对成绩平均分进行排序<br><br>    sc.sortChineseByAverage();<br>   }<br>   /**<br>  * 主菜单<br>   */<br> public void mainMenu() {<br>        System.out.println("***************************");<br>      System.out.println(        "**主菜单**");<br>      System.out.println(        "1--班级管理");<br>      System.out.println(        "2--学校管理");<br>      System.out.println(        "0--退出");<br>        System.out.println("***************************");<br>  }<br>   /**<br>  * 学校管理菜单<br>    */<br> public void schoolMenu() {<br>      System.out.println("*******************************************************");<br>      System.out.println(        "**学校管理**");<br>     System.out.println(        "1--创建班级");<br>      System.out.println(        "2--删除班级");<br>      System.out.println(        "3--通过班级名称查询班级信息");<br>      System.out.println(        "4--对各班语文成绩平均分进行由大到小排序");<br>        System.out.println(        "5--对各班数学成绩平均分进行由大到小排序");<br>        System.out.println(        "6--显示所有班级名称");<br>      System.out.println(        "9--返回上级菜单");<br>        System.out.println("*******************************************************");<br>  }<br><br>   /**<br>  * 班级管理菜单<br>    */<br> public void banjiMenu() {<br>       System.out.println("*******************************************************");<br>      System.out.println(        "**班级管理**");<br>     System.out.println(        "1--添加学生信息到主学生列表");<br>      System.out.println(        "2--添加学生信息到普通班级");<br>       System.out.println(        "3--通过学号查询学生信息");<br>        System.out.println(        "4--输入班级语文成绩");<br>      System.out.println(        "5--输入班级数学成绩");<br>      System.out.println(        "6--删除学生信息");<br>        System.out.println(        "7--显示所有学生信息");<br>      System.out.println(        "9--返回上级菜单");<br>        System.out.println("*******************************************************");<br>  }<br><br>   /**<br>  * 主流程<br>   */<br> public void test() {<br>        //实例化测试类<br>        TestDemo td=new TestDemo();<br>     Scanner sc=new Scanner(System.in);<br>      //定义3个变量,用来接收菜单数据<br>       int input=0,input1=0,input2=0;<br>      //创建学校对象并实例化<br>        School sch=new School();<br>        //创建班级对象(主学生列表)并实例化<br>     Banji mainBanJi=new Banji("主学生列表");<br>     //将班级对象添加到学校中,后期在case中再添加学生信息<br>       sch.addBanji(mainBanJi);<br>        //声明其他班级对象信息,后期用来接收其他班级信息<br>       Banji otherBanJi=null;<br><br>      //进行循环主菜单<br>       while(true) {<br>           td.mainMenu();<br>          System.out.println("请输入对应数字进行列表管理");<br>            //从键盘接收数据,input为控制主菜单列表管理<br>           try {<br>               input=sc.nextInt();<br>             if(input==0) {<br>                  break;<br>              }<br>           } catch (InputMismatchException e) {<br>                    System.out.println("输入信息有误,只可输入整数,请重新输入!");<br>                 sc.next();//接收错误数据<br>                  continue;//重新执行本次循环<br>         }<br>               switch(input) {<br>             case 1://班级管理<br>                   while(true) {<br>                       td.banjiMenu();<br>                     System.out.println("请输入对应数字进行班级列表管理");<br>                      try {<br>                           input1=sc.nextInt();<br>                        } catch (InputMismatchException e) {<br>                            System.out.println("输入信息有误,只可输入整数,请重新输入!");<br>                         sc.next();//接收错误数据<br>                          continue;//重新执行本次循环<br>                     }<br>                       if(input1==9) {<br>                         break;<br>                      }<br>                       switch(input1) {<br>                        case 1:<br>                         System.out.println("添加学生信息到主学生列表");<br>                         System.out.println("请输入要添加的学生信息个数:");<br>                            int count=0;<br>                           try {<br>                           count = sc.nextInt();<br>                           } catch (InputMismatchException e) {<br>                                System.out.println("输入信息有误,只可输入整数,请重新输入!");<br>                             sc.next();//接收错误数据<br>                              continue;<br>                           }<br>                           for(int i=1;i<=count;i++) {<br>                          System.out.println("请输入第"+i+"个学生的信息");<br>                          System.out.println("请输入学生的id:");<br>                            String strNum=sc.next();<br>                            System.out.println("请输入学生的姓名:");<br>                            String strName=sc.next();<br>                           //创建学生对象<br>                            Student stu=new Student(strNum,strName);<br>                            //把学生信息添加到主学生列表<br>                         mainBanJi.addStudent(stu);<br>                           System.out.println("添加成功");<br>                            }<br>                           System.out.println(mainBanJi.getClassName()+"的学生信息为:");<br>                         mainBanJi.displayAllStudent();<br>                          break;<br>                      case 2:<br>                         System.out.println("添加学生信息到普通列表");<br>                          System.out.println("请输入要添加的班级名称:");<br>                         String strName=sc.next();<br>                           //判断班级名称是否存在<br>                            otherBanJi=sch.searchByName(strName);<br>                           if(otherBanJi==null) {<br>                              System.out.println("未查询到此班级");<br>                          }else {<br>                             System.out.println("请输入要添加的学生个数:");<br>                             int count1=0;<br>                               try {<br>                                    count1=sc.nextInt();<br>                               } catch (InputMismatchException e) {<br>                                    System.out.println("输入信息有误,只可输入整数,请重新输入!");<br>                                 sc.next();//接收错误数据<br>                                  continue;<br>                               }<br>                               for(int i=1;i<=count1;i++) {<br>                                 System.out.println("请输入第"+i+"个学生信息:");<br>                                  System.out.println("请输入要添加的学生id:");<br>                                 String strNum=sc.next();<br>                                    Student stu=mainBanJi.searchStudentByNum(strNum);<br>                                   if(stu==null) {<br>                                 //主学生列表如果不存在此学生信息,那么需要在主学生列表也添加此学生信息<br>                                    System.out.println("该学生信息在主学生列表当中不存在,请输入学生的其他信息");<br>                                  System.out.println("请输入要添加的学生姓名:");<br>                                 String strName1=sc.next();<br>                                  //创建一个学生对象。<br>                                 stu=new Student(strNum,strName1);<br>                                   mainBanJi.addStudent(stu);<br>                                  otherBanJi.addStudent(stu);<br><br>                             }else {<br>                                 otherBanJi.addStudent(stu);<br><br>                             }<br>                                   System.out.println("添加成功");<br>                         }   <br>                                //显示所有班级的信息<br>                             System.out.println(mainBanJi.getClassName());<br>                               mainBanJi.displayAllStudent();<br>                              System.out.println(otherBanJi.getClassName()+"班级列表");<br>                               otherBanJi.displayAllStudent();<br>                         }<br>                           break;<br>                      case 3:<br>                         System.out.println("通过学号查询学生信息");<br>                           System.out.println("请输入要查询的班级名称:");<br>                         String strName1=sc.next();<br>                          Banji bj=sch.searchByName(strName1);<br>                            if(bj==null) {<br>                              System.out.println("此班级不存在");<br>                           }else {<br>                             System.out.println("请输入要查询的学生Id:");<br>                             String strNum=sc.next();<br>                                Student stu = bj.searchStudentByNum(strNum);<br>                                if(stu==null) {<br>                                 System.out.println("该学生信息在"+bj.getClassName()+"不存在");<br>                               }else {<br>                                 System.out.println(stu);<br>                                }<br>                           }<br>                           break;<br>                      case 4:<br>                         System.out.println("输入班级的语文成绩");<br>                            System.out.println("请输入班级的名称:");<br>                            String strName2=sc.next();<br>                          bj=sch.searchByName(strName2);<br>                          if(bj==null) {<br>                              System.out.println("该班级不存在");<br>                           }else {<br>                             for(Student stu:bj.getStuList()) {<br>                                  System.out.println("学生id:"+stu.getStuNum()+"学生姓名:"+stu.getStuName());<br>                                   System.out.println("请输入学生的语文成绩:");<br>                                  try {<br>                                       float scoer=sc.nextFloat();<br>                                 } catch (InputMismatchException e) {<br>                                        System.out.println("输入信息有误,只可输入数字,请重新输入!");<br>                                     sc.next();//接收错误数据<br>                                      continue;<br>                                   }<br>                                   bj.insertChineseScore(stu.getStuNum(),stu.getChinese());<br>                                }<br>                           }<br>                           break;<br>                      case 5:<br>                         System.out.println("输入班级的数学成绩");<br>                            System.out.println("请输入班级的名称:");<br>                            String strName3=sc.next();<br>                          bj=sch.searchByName(strName3);<br>                          if(bj==null) {<br>                              System.out.println("该班级不存在");<br>                           }else {<br>                             for(Student stu:bj.getStuList()) {<br>                                  System.out.println("学生id:"+stu.getStuNum()+"学生姓名:"+stu.getStuName());<br>                                   System.out.println("请输入数学成绩:");<br>                                 try {<br>                                       float score=sc.nextFloat();<br>                                 } catch (InputMismatchException e) {<br>                                        System.out.println("输入信息有误,只可输入数字,请重新输入!");<br>                                     sc.next();//接收错误数据<br>                                      continue;<br>                                   }<br>                                   bj.insertMathScore(stu.getStuNum(), stu.getMath());<br>                             }<br>                           }<br>                           break;<br>                      case 6:<br>                         System.out.println("删除学生信息");<br>                           System.out.println("请输入班级的名称:");<br>                            String strName4=sc.next();<br>                          bj=sch.searchByName(strName4);<br>                          if(bj==null) {<br>                              System.out.println("该班级不存在!");<br>                          }else {<br>                             System.out.println("请输入学生Id:");<br>                             String strNum2=sc.next();<br>                               Student stu=bj.searchStudentByNum(strNum2);<br>                             if(stu==null) {<br>                                 System.out.println("没有找到"+stu.getStuNum()+"的学生信息");<br>                             }else {<br>                                 bj.deleteStudent(strNum2);<br>                                  System.out.println("删除成功");<br>                             }   <br>                            }<br>                           break;<br>                      case 7:<br>                         System.out.println("显示所有学生信息");<br>                         System.out.println("请输入班级的名称:");<br>                            String strName5=sc.next();<br>                           bj=sch.searchByName(strName5);<br>                         if(bj==null) {<br>                              System.out.println("该班级不存在");<br>                           }else {<br>                             bj.displayAllStudent();<br>                         }<br>                           break;<br>                      default :<br>                           System.out.println("输入有误,没有对应的操作");<br>                     }<br>                   }<br>                   break;<br>              case 2://学校管理<br>                   while(true) {<br>                       td.schoolMenu();;<br>                       System.out.println("请输入对应的数字进行学校列表管理");<br>                     try {<br>                           input2=sc.nextInt();<br>                        } catch (InputMismatchException e) {<br>                            System.out.println("输入信息有误,只可输入整数,请重新输入!");<br>                         sc.next();<br>                          continue;<br>                       }<br>                       if(input2==9) {<br>                         break;<br>                      }<br>                       switch(input2) {<br>                        case 1:<br>                         System.out.println("向学校中添加班级");<br>                         System.out.println("请输入班级编号:");<br>                         String strNum=sc.next();<br>                            System.out.println("请输入班级名称:");<br>                         String strName=sc.next();<br>                           Banji bj1=sch.searchByName(strName);<br>                            if(bj1==null) {<br>                             System.out.println("");<br>                         //创建新的班级<br>                            otherBanJi=new Banji(strNum,strName);<br>                           //把新创建的班级添加到学校中<br>                         sch.addBanji(otherBanJi);<br>                           System.out.println("添加成功");<br>                         }else {<br>                             System.out.println("添加失败,信息重复");<br>                            }<br>                           break;<br>                      case 2:<br>                         System.out.println("从学校中删除班级");<br>                         System.out.println("请输入班级名称:");<br>                         String strName1=sc.next();<br>                          Banji bj2=sch.searchByName(strName1);<br>                           if(bj2==null) {<br>                             System.out.println("该班级不存在");<br>                           }else {<br>                             sch.deleteBanji(bj2);<br>                               System.out.println("删除成功");<br>                         }<br>                           break;<br>                      case 3:<br>                         System.out.println("通过班级名称查询班级");<br>                           System.out.println("请输入需要查询班级的名称:");<br>                            String strName2=sc.next();<br>                          Banji bj3=sch.searchByName(strName2);<br>                           if(bj3==null) {<br>                             System.out.println("此班级不存在");<br>                           }else {<br>                             System.out.println(bj3);<br>                            }<br>                           break;<br>                      case 4:<br>                         System.out.println("对各班语文成绩按平均分进行由大到小排序");<br><br>                           if(mainBanJi.getStuList().isEmpty()) {<br>                              System.out.println("还未向班级中添加学生");<br>                           }else {<br>                                 for(Student stu:mainBanJi.getStuList()) {<br>                                   if(stu.getChinese()<0.0||stu.getMath()<0.0) {<br>                                         System.out.println("该班成绩还未添加,需先添加班级成绩");<br>                                    }else {<br>                                         System.out.println("语文平均成绩由大到小的排序为:");<br>                                         sch.sortChineseByAverage();<br>                                  }<br>                               }<br><br><br><br>                           }<br><br>                          break;<br>                      case 5:<br>                         System.out.println("对各班数学成绩按平均分进行由大到小排序");<br>                             if(mainBanJi.getStuList().isEmpty()) {<br>                                    System.out.println("还未向班级中添加学生");<br>                               }else {<br>                            System.out.println("数学平均成绩由大到小的排序为:");<br>                          sch.sortMathByAverage();}<br>                           break;<br>                      case 6:<br>                         System.out.println("显示所有班级名称");<br>                         System.out.println("所有的班级名称为:");<br>                            sch.displayBanjiName();<br>                         break;<br>                      default:<br>                            System.out.println("输入有误,没有对应的操作"); <br>                        }<br>                   }<br>                   break;<br>              default :<br>                   System.out.println("输入有误,没有对应的操作");<br>             }<br>           }<br>       }//方法结束<br><br> public static void main(String[] args) {<br>        // TODO Auto-generated method stub<br>      TestDemo t=new TestDemo();<br>//    t.testBanji();<br>//        t.testSchool();<br>     t.test();<br><br>   }<br><br>}<br>

问题:

如果在没有创建班级的时候,在

4--对各班语文成绩平均分进行由大到小排序,结果为:

还未向班级中添加学生; 但是如果对主列表学生添加过信息后,并为对班级中添加学生,结果为平均分

一班的平均分NaN,怎么解决这个问题阿。应该提示还没向班级添加成绩。而不是这个。我用otherBanJi.getStuList();会出现空指针异常;


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

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

1回答
好帮手慕阿园 2021-02-07 10:34:15

同学你好,if判断条件应该是==0.0f,并且这里是对语文成绩的排序,只需要判断语文成绩即可

http://img1.sycdn.imooc.com//climg/601f517509bb6c5c04150085.jpg

修改如下

http://img1.sycdn.imooc.com//climg/601f51a0091991b905320096.jpg

祝学习愉快~

  • 提问者 rock221 #1
    1
    修改后的:<br>case 4:<br>                            System.out.println("对各班语文成绩按平均分进行由大到小排序");<br><br>                           if(mainBanJi.getStuList().isEmpty()) {<br>                              System.out.println("还未向班级中添加学生");<br>                           }else {<br>                                 for(Student stu:mainBanJi.getStuList()) {<br>                                   if(stu.getChinese()==0.0f) {<br>                                        System.out.println("该班成绩还未添加,需先添加班级成绩");<br>                                    }else {<br>                                         System.out.println("语文平均成绩由大到小的排序为:");<br>                                         sch.sortChineseByAverage();<br> }<br>   }<br><br>break;<br>

    修改后添加过班级信息,结果如下: 提示

    该班成绩还未添加,需先添加班级成绩

    1
    ​***************************<br>**主菜单**<br>1--班级管理<br>2--学校管理<br>0--退出<br>***************************<br>请输入对应数字进行列表管理<br>2<br>*******************************************************<br>**学校管理**<br>1--创建班级<br>2--删除班级<br>3--通过班级名称查询班级信息<br>4--对各班语文成绩平均分进行由大到小排序<br>5--对各班数学成绩平均分进行由大到小排序<br>6--显示所有班级名称<br>9--返回上级菜单<br>*******************************************************<br>请输入对应的数字进行学校列表管理<br>1<br>向学校中添加班级<br>请输入班级编号:<br>1<br>请输入班级名称:<br>一班<br><br>添加成功<br>*******************************************************<br>**学校管理**<br>1--创建班级<br>2--删除班级<br>3--通过班级名称查询班级信息<br>4--对各班语文成绩平均分进行由大到小排序<br>5--对各班数学成绩平均分进行由大到小排序<br>6--显示所有班级名称<br>9--返回上级菜单<br>*******************************************************<br>请输入对应的数字进行学校列表管理<br>9<br>***************************<br>**主菜单**<br>1--班级管理<br>2--学校管理<br>0--退出<br>***************************<br>请输入对应数字进行列表管理<br>1<br>*******************************************************<br>**班级管理**<br>1--添加学生信息到主学生列表<br>2--添加学生信息到普通班级<br>3--通过学号查询学生信息<br>4--输入班级语文成绩<br>5--输入班级数学成绩<br>6--删除学生信息<br>7--显示所有学生信息<br>9--返回上级菜单<br>*******************************************************<br>请输入对应数字进行班级列表管理<br>1<br>添加学生信息到主学生列表<br>请输入要添加的学生信息个数:<br>1<br>请输入第1个学生的信息<br>请输入学生的id:<br>1<br>请输入学生的姓名:<br>张三<br>添加成功<br>主学生列表的学生信息为:<br>学生信息: [学号:1, 姓名:张三]<br>*******************************************************<br>**班级管理**<br>1--添加学生信息到主学生列表<br>2--添加学生信息到普通班级<br>3--通过学号查询学生信息<br>4--输入班级语文成绩<br>5--输入班级数学成绩<br>6--删除学生信息<br>7--显示所有学生信息<br>9--返回上级菜单<br>*******************************************************<br>请输入对应数字进行班级列表管理<br>2<br>添加学生信息到普通列表<br>请输入要添加的班级名称:<br>一班<br>请输入要添加的学生个数:<br>1<br>请输入第1个学生信息:<br>请输入要添加的学生id:<br>2<br>该学生信息在主学生列表当中不存在,请输入学生的其他信息<br>请输入要添加的学生姓名:<br>王五<br>添加成功<br>主学生列表<br>学生信息: [学号:1, 姓名:张三]<br>学生信息: [学号:2, 姓名:王五]<br>一班班级列表<br>学生信息: [学号:2, 姓名:王五]<br>*******************************************************<br>**班级管理**<br>1--添加学生信息到主学生列表<br>2--添加学生信息到普通班级<br>3--通过学号查询学生信息<br>4--输入班级语文成绩<br>5--输入班级数学成绩<br>6--删除学生信息<br>7--显示所有学生信息<br>9--返回上级菜单<br>*******************************************************<br>请输入对应数字进行班级列表管理<br>4<br>输入班级的语文成绩<br>请输入班级的名称:<br>一班<br>学生id:2学生姓名:王五<br>请输入学生的语文成绩:<br>80<br>添加语文成绩成功!<br>*******************************************************<br>**班级管理**<br>1--添加学生信息到主学生列表<br>2--添加学生信息到普通班级<br>3--通过学号查询学生信息<br>4--输入班级语文成绩<br>5--输入班级数学成绩<br>6--删除学生信息<br>7--显示所有学生信息<br>9--返回上级菜单<br>*******************************************************<br>请输入对应数字进行班级列表管理<br>9<br>***************************<br>**主菜单**<br>1--班级管理<br>2--学校管理<br>0--退出<br>***************************<br>请输入对应数字进行列表管理<br>2<br>*******************************************************<br>**学校管理**<br>1--创建班级<br>2--删除班级<br>3--通过班级名称查询班级信息<br>4--对各班语文成绩平均分进行由大到小排序<br>5--对各班数学成绩平均分进行由大到小排序<br>6--显示所有班级名称<br>9--返回上级菜单<br>*******************************************************<br>请输入对应的数字进行学校列表管理<br>4<br>对各班语文成绩按平均分进行由大到小排序<br>该班成绩还未添加,需先添加班级成绩<br>该班成绩还未添加,需先添加班级成绩<br>*******************************************************<br>**学校管理**<br>1--创建班级<br>2--删除班级<br>3--通过班级名称查询班级信息<br>4--对各班语文成绩平均分进行由大到小排序<br>5--对各班数学成绩平均分进行由大到小排序<br>6--显示所有班级名称<br>9--返回上级菜单<br>*******************************************************<br>请输入对应的数字进行学校列表管理<br>


    2021-02-07 10:56:43
  • 提问者 rock221 #2

    老师,已经解决了,是因为我在班级语文成绩写入的时候,代码弄错了。 所以导致没赋值从键盘接收的数据 

    2021-02-07 13:03:54
  • 好帮手慕阿园 回复 提问者 rock221 #3

    同学自己找到了问题所在,很棒呐 ,继续加油

    祝学习愉快~

    2021-02-07 13:36:15
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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