// @Override // public int hashCode() { // final int prime=31; // int result=1; // result=prime*result+((name==null)?0:name.hashCode()); // return result; // } // @Override // public boolean equals(Object obj) { // if (this == obj) { // return true; // } // if (obj == null) // return false; // if (!(obj instanceof Course)) // return false; // Course course = (Course) obj; // if (this.name == null) { // if (course.name == null) // return true; // else // return false; // // }else{ // if (this.name.equals(course.name)) // return true; // else // return false; // // } // ////} // // } //}
比较的是两个课程的 对象是否相等。调用的是课程的比较方法。当然是写在课程里
用CourseToSelect的意思是在List集合里用contains方法,
用student.courses的意思是在Set集合里用contains方法
就是一个测试,让你知道两个里面都可以用contains,其实你全部换成一样的也能运行,不过就是在List集合中用了两个contains方法,或是在Set集合中用了两个contains方法。
一样一个的意思就是分别在Set和List集合中演示contains方法
毕竟是免费的
解决了, ArrayList没有实例化,
他直接将Student设置为了该类的Student类型的成员变量student
我也遇到了类似的情况。只不过我是修改了Scanner的位置解决的
其实也可以,但是在testSetContains方法里有这么一句
System.out.println("备选课程中是否包含课程:" + course2.name + ", " +
student.courses.contains(course2));
所以要把student作为SetList类的一个属性,不然退出了createStudentAndSelectCours方法后student对象就不存在了,你在testSetContains方法里也就访问不到
因为你是在createStudentAndSelectCours()方法里对学生选课的,在testSetContains()方法里再实例化一个对象出来,也不是选了课的那个,除非你想办法比如用返回值传参数之类的再传入testSetContains()方法,而将student变为属性就可以直接在createStudentAndSelectCours()方法和testSetContains()方法都能访问student属性,而且是同一个student
这个student就是已经实例化的对象,应该是在前面实例化过了,因为类的名称开头都是大写字母,小写字母开头就是对象名
student.courses.contains(course2) 应该改为 coursesToSelect.contains(course2)
谢谢解答,本人太粗心了
在每个类中,在重写 equals 方法的时侯,一定要重写 hashcode 方法。如果不这样做,你的类违反了hashCode的通用约定,这会阻止它在HashMap和HashSet这样的集合中正常工作。因为你之前已经重写过equals方法,所以就并不是说没变其内部的代码
如果不用泛型规定,那默认泛型是Object对象,根据java多态的特性,如果子类重写方法,那调用时方法是子类的方法。
希望对你有帮助
从你给出的代码 没有什么问题。。如果是报NullPointerException的错误是很有可能你在实例化student的时候没有给student的courses初始化。。。你看一下你的courses有没有被初始化
我也是同样的问题,不知道重写了equals和hascode为啥结果还是false
你是不是Hashcode里面选个ID跟name 只要选name就好了
补充下,你可以自己去自定义快捷键...
还有一个,刚才说的第一点,可能我前面理解有错,如果你是指当前窗口的最大化与还原,那快捷键是ctrl + m
是指当前对象的引用,与obj的引用指向同一个对象,地址是一样的。我这么认为哈
这个注释掉,然后
这里这样写,就可以啦
只看这个类,没办法解决问题啊。据我看你的这个异常信息,大概是非法参数异常。你的方法需要什么类型的参数?
信息提示你是在调用add方法时出现的问题,在本类中找不到错误,就应该顺藤摸瓜找到方法定义处继续找。
是不是还需要改写hashcode()方法 让他们返回值一致呢?