从不同的类调用函数

时间:2012-09-23 00:11:17

标签: java list

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

//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);
}

我的主要问题似乎是让ArrayUnsortedList的find函数在find()的{​​{1}}部分调用我的equals函数,但我不确定为什么,就像我说当打印出来时,它可以使用我完美实现的List方法。

我几乎肯定这个问题与toString()中的find()函数没有调用我的ArraySortedList方法有关。我尝试使用一些依赖equals()方法的其他函数并得到相同的结果。

1 个答案:

答案 0 :(得分:1)

您的equals方法应该使用Object参数,而不是高尔夫球手。 equals(Golfer)方法正在重载Comparable的{​​{1}}方法,但没有实现它。它只是一个没有其他代码知道的重载方法,所以它不会被调用。

equals(Object)