我有一个简单的循环来检查任何重复的结果, 其中studresults保存我的结果,结果是给予方法的对象结果,r是数组中的当前对象。 我一直在整个程序中成功使用这个方法,虽然它在这种情况下不工作,即使我调试结果和r,完全相同,是否有人知道为什么这可能是?我已经按照其他答案的建议尝试了@Override无济于事。
我试图通过抛出异常来阻止重复的数组元素。
for(Result r : studresults)
{
if(r.equals(result))
{
return false;
}
}
编辑好在这里是整个班级>
package ams.model;
import java.util.ArrayList;
import java.util.Arrays;
import ams.model.exception.EnrollmentException;
public abstract class AbstractStudent implements Student {
private int studentId;
private String studentName;
private ArrayList<Course> studcourses = new ArrayList<Course>();
private ArrayList<Result> studresults = new ArrayList<Result>();
public AbstractStudent(int studentId, String studentName) {
this.studentId = studentId;
this.studentName = studentName;
}
public String getFullName() {
return studentName;
}
public int getStudentId() {
return studentId;
}
public Result[] getResults() {
Result[] res = studresults.toArray(new Result[0]);
if(res.length > 0 )
{
return res;
}
return null;
}
public boolean addResult(Result result)
{
for(Result r : studresults)
{
if(r.equals(result))
{
return false;
}
}
studresults.add(result);
return true;
}
public void enrollIntoCourse(Course c)
{
//for re-enrollment
if(studcourses.contains(c))
{
studcourses.remove(c);
studresults.clear();
}
studcourses.add(c);
}
public void withdrawFromCourse(Course c) throws EnrollmentException
{
if(studcourses.size() > 0)
{
studcourses.remove(c);
}
else
throw new EnrollmentException();
}
public Course[] getCurrentEnrolment()
{
return studcourses.toArray(new Course[0]);
}
public abstract int calculateCurrentLoad();
public int calculateCareerPoints() {
// TODO Auto-generated method stub
return 0;
}
public String toString()
{
return studentId + ":" + studentName +":" + calculateCurrentLoad();
}
}
答案 0 :(得分:1)
您是否已在hashCode
中覆盖Result
方法?
如果覆盖equals
,则还必须覆盖hashCode
方法,以允许为类似对象(具有相同值但实际上具有不同对象实例的对象)返回相同的哈希码。
我认为hashcode的默认实现会为不同的对象实例返回不同的值,即使它们具有相同的值。
答案 1 :(得分:0)
相反,我转换为String然后进行比较,它的工作原理???
让我觉得之前有些不同寻常的事情?
新方法
public boolean addResult(Result r)
{
for (Result s : studresults)
{
String sr1 = s.toString();
String sr2 = r.toString();
if(sr1.equals(sr2))
{
return false;
}
}