0

我正在编写一个程序,我应该在调用它之前检查某个对象是否在列表中。我设置了contains()应该使用我在我的类上实现equals()的接口的方法的方法, 但它似乎没有调用它(我将打印语句放入检查)。我似乎无法弄清楚代码有什么问题,我用来浏览列表的类甚至使用了我在我的类中定义的正确方法,但由于某种原因它不会使用我实现的方法。ComparableGolferArrayUnsortedListtoString()Golferequals()

//From "GolfApp.java"    
public class GolfApp{
ListInterface <Golfer>golfers = new ArraySortedList<Golfer> (20);
Golfer golfer;
//..*snip*..
if(this.golfers.contains(new Golfer(name,score)))
    System.out.println("The list already contains this golfer");
else{
    this.golfers.add(this.golfer = new Golfer(name,score));
    System.out.println("This golfer is already on the list");
}

//From "ArrayUnsortedList.java"
protected void find(T target){
    location = 0;
    found = false;

    while (location < numElements){
        if (list[location].equals(target))  //Where I think the problem is                       
        {
            found = true;
            return;
        }
        else 
            location++;
    }
 }

 public boolean contains(T element){
    find(element);
    return found;
 }


//From "Golfer.java"    
public class Golfer implements Comparable<Golfer>{
//..irrelavant code sniped..//
public boolean equals(Golfer golfer)
{
    String thisString = score + ":" +  name;  
    String otherString = golfer.getScore() + ":" + golfer.getName() ;
    System.out.println("Golfer.equals() has bee called");

    return thisString.equalsIgnoreCase(otherString);
}

public String toString()
{
    return (score + ":" + name);
}

我的主要问题似乎是让 find 函数在部分中ArrayUnsortedList调用我的 equals 函数,但我不确定为什么,就像我说的那样,当我把它打印出来时,它可以与我完美实现的方法一起使用。find()ListtoString()

我几乎肯定问题与不调用我的方法find()中的函数有关。我尝试使用其他一些依赖于该方法的函数并得到了相同的结果。ArraySortedListequals()find()

4

1 回答 1

1

您的equals方法应该采用 Object 参数,而不是 Golfer。该equals(Golfer)方法重载了Comparable'sequals(Object)方法,但没有实现它。它只是一个其他代码不知道的重载方法,因此不会被调用。

public boolean equals(Object obj)
{
    if(!(obj instanceof Golfer)) return false;

    Golfer golfer = (Golfer)obj;
    String thisString = score + ":" +  name;  
    String otherString = golfer.getScore() + ":" + golfer.getName() ;
    System.out.println("Golfer.equals() has bee called");

    return thisString.equalsIgnoreCase(otherString);
}
于 2012-09-25T14:58:56.880 回答