0

我有一个简单的循环来检查任何重复的结果,其中 studresults 保存我的 results , result 是给方法的对象结果, r 是数组中的当前对象。我在整个程序中都成功地使用了这种方法,尽管它在这种情况下不起作用,即使当我调试 result 和 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();
}

}

4

2 回答 2

1

你已经覆盖了hashCode方法Result吗?
如果您 override equals,您还必须重写该hashCode方法以允许您为相似的对象(具有相同值但实际上不同的对象实例的对象)返回相同的哈希码。

我认为哈希码的默认实现将为不同的对象实例返回不同的值,即使它们具有相同的值。

于 2012-09-06T02:12:13.903 回答
0

相反,我转换为toString,然后进行比较,它可以工作???

让我觉得以前有些东西有点不一样?

新方法

public boolean addResult(Result r)
{
    for (Result s : studresults)
    {
         String sr1 = s.toString();
         String sr2 = r.toString();
         if(sr1.equals(sr2))
         {
             return false;
         }
    }   
于 2012-09-06T07:06:15.233 回答