我正在编写一个程序,我应该在调用之前检查并查看某个对象是否在列表中。我设置了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()
方法的其他函数并得到相同的结果。
答案 0 :(得分:1)
您的equals
方法应该使用Object参数,而不是高尔夫球手。 equals(Golfer)
方法正在重载Comparable
的{{1}}方法,但没有实现它。它只是一个没有其他代码知道的重载方法,所以它不会被调用。
equals(Object)