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>();
}
}
contains方法里面调用了hashcode()和equal()方法,当hashcode()方法返回TRUE时,才继续调用equals()方法,所以这个地方需要重写hashcode()方法
我也犯了相同的错误,原因在创建学生并选课的方法里面,public void createStudentAndSelectCourses()的第一行代码是student=new Student("1","小明"),而不是Student student=new Student("1","小明"),因为student已经在前面定义过的,是公有属性
创建学生对象并选课方法里面的第一行代码 s tudent = new Student("1", "小明");你看你的是这个么
testSetContains(Student student)
你这个student对象里没有传进去东西,是空的
我记得老师在讲这个的时候好像在Student类中重写了equal()方法,你再看看原视频,只要是照着来的,应该不会有错