添加班级之后使用显示所有班级功能第一个是null,删除班级功能出现空指针错误,请老师看看。

添加班级之后使用显示所有班级功能第一个是null,删除班级功能出现空指针错误,请老师看看。

package com.imooc.test;
import java.util.InputMismatchException;
import java.util.Scanner;
import com.imooc.homework4.BanJi;
import com.imooc.homework4.School;
import com.imooc.homework4.Student;
public class TestDemo 
{
 public void testDemo()
 {
  Student stu1 = new Student("13号", "张三", 78f, 82.5f);
  Student stu2 = new Student("14号", "李四", 98f, 69.4f);
  Student stu3 = new Student("15号", "王五", 77.8f, 81.5f);
  System.out.println(stu1);
  System.out.println(stu1.equals(stu2));
 }
 
 public void testBanJi(){}
 {
  
  Student stu1 = new Student("13号", "张三", 78f, 82.5f);
  Student stu2 = new Student("14号", "李四", 98f, 69.4f);
  Student stu3 = new Student("15号", "王五", 77.8f, 81.5f);
  Student stu4 = new Student("15号", "王五", 77.8f, 81.5f);
  BanJi bj1 = new BanJi("A003", "1(3)班");
  bj1.addStudent(stu1);
  bj1.addStudent(stu2);
  bj1.addStudent(stu3);
  bj1.addStudent(stu4);
  bj1.displayAllStudent();
  Student stu5 =bj1.searchStudentByNum("14号");
  if(stu5!=null)
  {
   System.out.println("根据学号查询的歌曲信息为");
   System.out.println(stu5);
  }
  else
  {
   System.out.println("该学生不存在。");
  }
  bj1.deleteStudent("15号");
  bj1.displayAllStudent();
  bj1.insertChineseScore("15号", 87f);
  bj1.displayAllStudent();
  bj1.insertMathScore("13号", 99.87f);
  bj1.displayAllStudent();
 }
 public void testSchool()
 {
  Student stu1 = new Student("13号", "张三", 78f, 62.5f);
  Student stu2 = new Student("14号", "李四", 58f, 79.4f);
  Student stu3 = new Student("15号", "王五", 77.8f, 81.5f);
  Student stu4 = new Student("13号", "张六", 78f, 52.5f);
  Student stu5 = new Student("14号", "李七", 95f, 69.4f);
  Student stu6 = new Student("15号", "李八", 77.8f, 81.5f);
  Student stu7 = new Student("13号", "张九", 78f, 82.5f);
  Student stu8 = new Student("14号", "李十", 88f, 69.4f);
  Student stu9 = new Student("15号", "王十一", 77.8f, 51.5f);
  School sc = new School();
  BanJi bj1 = new BanJi("A001", "1(1)班");
  BanJi bj2 = new BanJi("A002", "1(2)班");
  BanJi bj3 = new BanJi("A003", "1(3)班");
  bj1.addStudent(stu1);
  bj1.addStudent(stu2);
  bj1.addStudent(stu3);
  bj2.addStudent(stu4);
  bj2.addStudent(stu5);
  bj2.addStudent(stu6);
  bj3.addStudent(stu7);
  bj3.addStudent(stu8);
  bj3.addStudent(stu9);
  sc.addBanji(bj1);
  sc.addBanji(bj2);
  sc.addBanji(bj3);
  sc.displayBanJiName();
  sc.deleteBanji(bj3);
  sc.displayBanJiName();
  BanJi bj4 = sc.searchByName("1(1)班");
  if(bj4!=null)
  {
  bj4.displayAllStudent();
  }
  else
  {
   System.out.println("没有找到此班级!");
  } 
  sc.sortChineseByAverage();
  sc.sortMathByAverage();
 }
 
 public void mainMenu() 
 {
  System.out.println("******************************");
  System.out.println("          **主菜单**          ");
  System.out.println("          1--班级管理                 ");
  System.out.println("          2--学校管理                 ");
  System.out.println("          0--退出                        ");
 }
 
 public void banJiMenu()
 {
  System.out.println("******************************");
     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("  9--返回上级菜单            ");
  System.out.println("******************************");
 }
 
 public void schoolMenu()
 {
  System.out.println("******************************");
  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("    9--返回上级菜单            ");
  System.out.println("******************************");
 }
 
 public void test()
 {
  TestDemo td = new TestDemo();
  Scanner sc = new Scanner(System.in);
  int input1=0, input2=0, input3=0;
  School banJiList = new School();
  BanJi stuList = new BanJi();
  banJiList.addBanji(stuList);
  while(true)
  {
   td.mainMenu();
   System.out.println("请输入对应数字进行操作");
   input1 = sc.nextInt();
   if(input1==0)
   {
    break;
   }
   switch(input1)
   {
   case 1:
    while(true)
    {
     td.banJiMenu();
     System.out.println("请输入对应数字进行操作");
     input2 = sc.nextInt();
     if(input2==7)
     {
      break;
     }
     switch(input2)
     {
     case 1:
      System.out.println("将学生添加到班级列表");
      break;
     case 2:
      System.out.println("通过学生学号查询学生信息");
      break;
     case 3:
      System.out.println("录入语文成绩");
      break;
     case 4:
      System.out.println("录入数学成绩");
      break;
     case 5:
      System.out.println("删除学生信息");
      break;
     case 6:
      System.out.println("显示列表中所有学生");
      
      break;
     default:
      System.out.println("请输入指定的数字");
      break;  
     }
    }
    break;
    
   case 2:
    while(true)
    {
     td.schoolMenu();
     System.out.println("请输入对应数字进行学校列表管理");
     input3 = sc.nextInt();
     if(input3==7)
     {
      break;
     }
     switch(input3)
     {
     case 1:
      System.out.println("向学校中添加班级");
      System.out.println("请输入班级编号");
      try
      {
      String classId = sc.next();
      System.out.println("请输入班级名称");
         String className = sc.next();
          stuList = new BanJi(classId, className);
          banJiList.addBanji(stuList);
      }
      catch(InputMismatchException e)
      {
       System.out.println("请输入正确的数字");
       String s = sc.next();
      }
      break;
      
     case 2:
      System.out.println("从学校中删除班级! ");
      System.out.println("请输入班级名称");
      try
      {
      String className = sc.next();
      BanJi bj = banJiList.searchByName(className);
      banJiList.deleteBanji(bj);
      }
      catch(InputMismatchException e)
      {
      System.out.println("请输入正确的数字");
      String s = sc.next();
      break;
      }      
      break;
      
     case 3:
      System.out.println("通过班级名称查询班级信息");
      break;
      
     case 4:
      System.out.println("对各班语文成绩平均分进行由大到小排序");
      break;
      
     case 5:
      System.out.println("对各班数学成绩平均分进行由大到小排序 ");    
      break;
      
     case 6:
      System.out.println("显示所有班级名称");
      banJiList.displayBanJiName();
      break;
     default:
      System.out.println("请输入指定的数字");
      break;
     }
    }
    break;
    
   default:
    System.out.println("请输入指定的数字");
    break;
   }
  }
 }
 
 public static void main(String[] args) 
 {
  TestDemo ts = new TestDemo();
  //Scanner so = new Scanner(System.in);
  //ts.testDemo();
  //ts.testBanJi();
        //ts.testSchool();
  ts.test();
 }
}
package com.imooc.homework4;
public class Student 
{
 private String stuNum;
 private String stuName;
 private float math;
 private float chinese;
 
 public Student()
 {
  
 }
 public Student(String stuNum, String stuName, float math, float chinese) 
 {
  this.setStuNum(stuNum);
  this.setStuName(stuName);
  this.setMath(math);
  this.setChinese(chinese);
 }
 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 float getMath() 
 {
  return math;
 }
 public void setMath(float math) 
 {
  this.math = math;
 }
 public float getChinese()
 {
  return chinese;
 }
 public void setChinese(float chinese) 
 {
  this.chinese = chinese;
 }
 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + Float.floatToIntBits(chinese);
  result = prime * result + Float.floatToIntBits(math);
  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;
  }
  if(obj.getClass()==Student.class)// 判断类型
  {
   Student stu = (Student)obj;
   return (stu.getStuNum().equals(stuNum)&&stu.getStuName().equals(stuName));
  }
  return false;
 }
 @Override
 public String toString() {
  return "学生信息: 学号为" + stuNum + ", 姓名为" + stuName + ", 数学成绩为" + math + ", 语文成绩为" + chinese ;
 }
    
}
package com.imooc.homework4;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class School
{
 Map<String, BanJi> banJiMap = new HashMap<String, BanJi>();//存放班级的集合。
 public School()
 {
  banJiMap = new HashMap<String, BanJi>();
 }
 public Map<String, BanJi> getBanJiMap() 
 {
  return banJiMap;
 }
    
 public void setBanJiMap(Map<String, BanJi> banJiMap) {
  this.banJiMap = banJiMap;
 }
 /**
  * 用于向学校添加班级
  * @param banji 我们要添加的班级
  */
 public void addBanji(BanJi banji)
 {
  banJiMap.put(banji.getClassName(),banji);
  System.out.println("添加成功!");
 }
  
 /**
  * 用于删除我们想要删除的班级
  * @param banji 我们想要删除的班级
  */
  public void deleteBanji(BanJi banji)
  {
   banJiMap.remove(banji.getClassName());
   System.out.println("删除成功!");
  }
  
  /**
   * 通过班级名称来查询班级
   * @param className 我们需要查询的班级的名称
   * @return 我们查询的班级。
   */
  public BanJi searchByName(String className) 
  {
   BanJi bj = null;
   Set<String> banJiListSet = banJiMap.keySet();
   for(String s:banJiListSet)
   {
    if(s.equals(className))
    {
     bj = banJiMap.get(s);
     break;
    }
   }
   return bj;
  }
  
  /**
   * 用于对语文成绩进行排序
   */
  public void sortChineseByAverage()
  {
   BanJi bj = null;
   Map<String, Float> scoreMap =  new HashMap<String, Float>();
   Set<String> classIdSet = banJiMap.keySet();
   boolean flag = false;
   for(String id : classIdSet)
   {
    bj = this.searchByName(id);
    if(bj.getStuList().isEmpty())
    {
     System.out.println(bj.getClassName()+"中没有学生,请先添加");
     flag = true;
    }
    else
    {
     float sum = 0.0f;
     int i = 0;
     List<Student> studentList = bj.getStuList();
     Iterator<Student> it = studentList.listIterator();//迭代求平均
     while(it.hasNext())
     {
      i++;
      sum = sum + it.next().getChinese();
     }
     float ave = sum/i;
     scoreMap.put(bj.getClassName(), ave);
    }
   }
   if(!flag)
   {
    List<Map.Entry<String, Float>> lm = new ArrayList<Map.Entry<String, Float>>(scoreMap.entrySet());
    Collections.sort(lm, new Comparator<Map.Entry<String, Float>>()
    {
    @Override
    public int compare(Entry<String, Float> o1, Entry<String, Float> o2) 
    {
     return o2.getValue().compareTo(o1.getValue());
    }
    
    });
          System.out.println("各班语文成绩按平均数排列为:");
          for(Map.Entry<String, Float> me : lm)
          {
           System.out.println(me.getKey()+"的语文平均分为:"+me.getValue());
          }
   }
  }
  
  public void sortMathByAverage()
  {
   BanJi bj = null;
   Map<String, Float> scoreMap =  new HashMap<String, Float>();
   Set<String> classIdSet = banJiMap.keySet();
   boolean flag = false;
   for(String id : classIdSet)
   {
    bj = this.searchByName(id);
    if(bj.getStuList().isEmpty())
    {
     System.out.println(bj.getClassName()+"中没有学生,请先添加");
     flag = true;
    }
    else
    {
     float sum = 0.0f;
     int i = 0;
     List<Student> studentList = bj.getStuList();
     Iterator<Student> it = studentList.listIterator();//迭代求平均
     while(it.hasNext())
     {
      i++;
      sum = sum + it.next().getMath();
     }
     float ave = sum/i;
     scoreMap.put(bj.getClassName(), ave);
    }
   }
   if(!flag)
   {
    List<Map.Entry<String, Float>> lm = new ArrayList<Map.Entry<String, Float>>(scoreMap.entrySet());
    Collections.sort(lm, new Comparator<Map.Entry<String, Float>>()
    {
    @Override
    public int compare(Entry<String, Float> o1, Entry<String, Float> o2) 
    {
     return o2.getValue().compareTo(o1.getValue());
    }
    
    });
          System.out.println("各班数学成绩按平均数排列为:");
          for(Map.Entry<String, Float> me : lm)
          {
           System.out.println(me.getKey()+"的数学平均分为:"+me.getValue());
          }
   }
  }
  
  /**
   * 用于显示学校中所有的班级的名称。
   */
  public void displayBanJiName() 
  {
   System.out.println("学校中的所有班级为:");
   Set<String> banJiList = banJiMap.keySet();
   for(String banJi:banJiList )
   {
    System.out.println(banJi);
   }
  }
}
package com.imooc.homework4;
import java.util.ArrayList;
import java.util.List;
public class BanJi 
{
 private String classId;
 private String className;
 private List<Student> stuList = new ArrayList<Student>();
 
 public BanJi()
 {
  
 }
 
 public BanJi(String classId, String className)
 {
  this.setClassId(classId);
  this.setClassName(className);
  stuList = new ArrayList<Student>();
 }
 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;
 }
 /**
  * 用于添加你想添加的学生。
  * @param stu要添加的学生
  */
 public void addStudent(Student stu1)
 {
  //我们要排除重复添加的情况
  boolean flag = false;
  for(Student stu2:stuList)
  {
   if(stu2.equals(stu1))
   {
    flag = true;
    break;
   }
  }
  if(flag)
  {
   System.out.println("该学生已存在于学生列表中,请不要重复添加!");
  }
  else
  {
   stuList.add(stu1);
  }
 }
 
 /**
  * 用于通过学号查询学生信息
  * @param stuNum我们想要查询的学生的学号。
  * @return 我们查询的学生的信息
  */
 public Student searchStudentByNum(String stuNum)
 {
  Student stu1 = null;
  for(Student stu2:stuList)
  {
   if(stu2.getStuNum().equals(stuNum))
   {
    stu1 = stu2;
    break;
   }
  }
  return stu1;
 }
 
 /**
  * 用于录入语文成绩。
  * @param stuNum我们想要输入成绩的学生的学号
  * @param score我们要录入的学生的成绩。
  */
 public void insertChineseScore(String stuNum,float score)
 {
  Student stu1 = searchStudentByNum(stuNum);
  if(stu1!=null)
  {
   stu1.setChinese(score);
  }
  else
  {
   System.out.println("没有找到此学生。");
  }
 }
 
 /**
  * 用于录入数学成绩。
  * @param stuNum我们想要输入成绩的学生的学号
  * @param score我们要录入的学生的成绩。
  */
 public void insertMathScore(String stuNum,float score)
 {
  Student stu1 = searchStudentByNum(stuNum);
  if(stu1!=null)
  {
   stu1.setMath(score);
  }
  else
  {
   System.out.println("没有找到此学生。");
  }
 }
 
 /**
  * 用于删除学生信息
  * @param stuNum我们想要删除的学生的学号
  */
 public void deleteStudent(String stuNum)
 {
  Student stu1 = searchStudentByNum(stuNum);
  if(stu1!=null)
  {
   stuList.remove(stu1);
  }
  else
  {
   System.out.println("没有找到此学生。");
  }
 }
 
 /**
  * 用于显示播放列表中的所有学生。
  */
 public void displayAllStudent()
 {
  System.out.println("班级中的所有学生为:");
  for(Student stu:stuList)
  {
   System.out.println(stu);
  }
 }
 
}


正在回答

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

1回答

同学你好,

1、在test方法中创建主学生列表为BanJi stuList = new BanJi();

将主学生列表添加到学校中,在addBanji方法中,执行banJiMap.put(banji.getClassName(), banji);由于主学生列表的班级名默认是null,所以在School类中displayBanJiName方法中展示所有班级时会输出null。

在删除班级时,在searchByName方法中有代码if (s.equals(className)) ,当s为主学生列表的null时,就会出现NullPointerException错误。

同学可以在创建主学生列表的时候传入班级编号和班级名称。

参考代码如下:

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

2、在删除班级时,当输入不存在的班级名称时,报NullPointerException错误。建议同学在searchByName()方法后判断一下班级是否存在。

参考代码如下:

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

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

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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