嗨,我是编程新手,我对我的比较方法有困难,我有几个类,我最初的问题是我的父类。
我得到了这个错误:
Person不是抽象的,并且不覆盖比较器中的方法compare(java.lang.Object,java.lang.Object
public class Person implements Comparator
{
//some methods
public int compare(Person p1, Person p2)
{
// if last names are the same compare first names
if(p1.getLastName().equals(p2.getLastName()))
{
return p1.getFirstName().compareTo(p2.getFirstName());
}
return p1.getLastName().compareTo(p2.getLastName());
}我的子类看起来像这样:
public class Player extends Person implements Comparator
{
//some methods
public int compare(Player p1, Player p2)
{
if(p1.getGamesPlayed()<p2.getGamesPlayed())
{
return -1;
}else if (p1.getGamesPlayed()==p2.getGamesPlayed())
{
return 0;
}else
{
return 1;
}
}我还有一个俱乐部类,它将所有信息存储在ArrayList<Player>团队中。
我的界面:
public interface Comparator<T>
{
int compare(T o1, T o2);
}我也有这门课
public class ComparePlayers implements Comparator<Player>
{
public int compare(Player p1, Player p2)
{
if(p1.getGamesPlayed()< p2.getGamesPlayed())
{
return -1;
}else if(p1.getGamesPlayed()== p2.getGamesPlayed())
{
return p1.getLastName().compareTo(p2.getLastName());
}else
{
return 1;
}
}这方面的规范是:
当新球员签约时,他/她应该按照姓氏的字母顺序(如果姓氏相同,则名字)被插入到俱乐部类中。为此,让Person和Player类实现适当的可比较接口。
编写一个实现比较器<Player>接口的类ComparePlayers。它应该通过玩游戏的数量来比较玩家(如果玩的游戏数量相同,则按照姓氏的字母顺序)。为接受比较器<Player>参数的Club类实现一个新的构造函数。因此,编写一个主程序,该程序将打印俱乐部中每个球员的信息,其中球员按所玩游戏的降序排列。这应该允许排序由主程序指定,而无需修改任何其他类中的代码。
我很抱歉,如果这是长篇大论,但我正在努力找出问题所在,我已经尝试了几个变体,但它就是不起作用。这将在周五到期,只要朝着正确的方向推进,我们将非常感激。
发布于 2011-04-30 20:23:14
将您的比较实现更改为:
public int compare(Object o1, Object 02)
{
Person p1 = (Person)o1;
Person p2 = (Person)o2;
// if last names are the same compare first names
if(p1.getLastName().equals(p2.getLastName()))
{
return p1.getFirstName().compareTo(p2.getFirstName());
}
return p1.getLastName().compareTo(p2.getLastName());
}发布于 2011-04-30 20:25:12
Person和Player不应该实现Comparator。如果它们需要按某种自然顺序进行比较,则应该实现Comparable。
您的ComparePlayers类看起来很好,有什么问题吗?(我假设您在这里使用的是java.util.Comparator,不是吗?)
为了对列表进行排序,您可以使用Collections.sort(players, new ComparePlayers());,如果players的类型为List<Player> (resp.该接口的实现)。
请注意,如果Person和Player应该为Comparable,那么您将需要实现compareTo(Person p2)和compareTo(Player p2),其中Player的实现应该为相等的游戏情况调用super.compareTo(p2);。
示例:
class Person<T extends Person> implements Comparable<T> {
public int compareTo(Tp2) { ... }
}
class Player extends Person<Player> {
public int compareTo(Player p2) {
...
if(gamesPlayed == p2.getGamesPlayed() ) {
return super.compareTo(p2);
}
...
}
}发布于 2011-04-30 20:21:09
compare的compare方法接受两个对象参数,而你的方法接受两个Person参数,因此编译器找不到你在哪里覆盖了这个方法。解决方案是要么将方法的参数更改为对象,要么(最好)使用通用比较器,因为这将允许compare方法具有Person参数,并在编译时添加类型安全检查。
编辑1:拍摄,您已经有了一个泛型可比较类的示例。
编辑2:直到我读到关于这个的评论,我才发现你在创建你自己的界面。我同意评论者的观点--使用java.util中已经存在的类。
https://stackoverflow.com/questions/5841665
复制相似问题