问答详情
源自:6-2 学生选课---判断 Set 中课程是否存在

为什么会出现java.lang.nullpointerexception错误

  public void testSetContains(){

  //提示输入课程名称

  System.out.println("请输入学生已选的课程名称:");

  String name=console.next();

  //创建一个新的课程对象,ID和名称,与course对象完全一样

  Course course2=new Course();

  course2.name=name;

  System.out.println("新创建课程:"+course2.name);

  System.out.println("备选课程中是否包含课程:"+course2.name+","+student.courses.contains(course2));

  }



执行到画线句出现错误,问题应该在student.courses.contains(course2),但是已经定义public Student student;  而且

public class Student {

public String id;


public String name;


public Set<Course> courses;//Set和List一样都是Collection的子接口


public Student(String id,String name){

this.id=id;

this.name=name;

this.courses=new HashSet<Course>(); 

}

}


提问者:慕粉1447203492 2017-05-24 10:53

个回答

  • 慕侠9171578
    2017-05-24 16:54:21
    已采纳

    contains方法里面调用了hashcode()和equal()方法,当hashcode()方法返回TRUE时,才继续调用equals()方法,所以这个地方需要重写hashcode()方法

  • yyAnn
    2018-06-28 09:22:30

    我也犯了相同的错误,原因在创建学生并选课的方法里面,public void createStudentAndSelectCourses()的第一行代码是student=new Student("1","小明"),而不是Student student=new Student("1","小明"),因为student已经在前面定义过的,是公有属性

  • IE游荡者
    2017-10-06 15:44:03

    创建学生对象并选课方法里面的第一行代码   s tudent = new Student("1", "小明");你看你的是这个么

  • Aspirine
    2017-09-22 11:29:27

    testSetContains(Student student)

  • Youngkos
    2017-09-06 23:37:36

    你这个student对象里没有传进去东西,是空的

  • qq_朝南楚香_0
    2017-05-24 16:06:23

    我记得老师在讲这个的时候好像在Student类中重写了equal()方法,你再看看原视频,只要是照着来的,应该不会有错