Java 我的类不重写抽象方法compareTo
我的课程详细介绍了市中心餐馆的属性,所说的属性是x/y位置和排名。问题是,每当我运行程序时,它都会抛出一个错误,即非抽象类“闹市区”不会覆盖抽象方法“compareTo”。我不能使这个类抽象,因为我需要在这个代码块之外初始化对象。我的程序哪里出错了?我的compareTo实现有问题吗?如有任何建议,将不胜感激Java 我的类不重写抽象方法compareTo,java,abstract-class,compareto,Java,Abstract Class,Compareto,我的课程详细介绍了市中心餐馆的属性,所说的属性是x/y位置和排名。问题是,每当我运行程序时,它都会抛出一个错误,即非抽象类“闹市区”不会覆盖抽象方法“compareTo”。我不能使这个类抽象,因为我需要在这个代码块之外初始化对象。我的程序哪里出错了?我的compareTo实现有问题吗?如有任何建议,将不胜感激 public class Downtown implements Comparable<Downtown> {//Throws error on this line p
public class Downtown implements Comparable<Downtown> {//Throws error on this line
private int x;
private int y;
private int rank;
public Downtown(int x, int y, int rank) {
this.x = x;
this.y = y;
this.rank = rank;
}
//Appropriate setters and getters for x , y and rank
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public int compareTo(Downtown p1, Downtown p2)//Actual comparison
{
// This is so that the sort goes x first, y second and rank last
// First by x- stop if this gives a result.
int xResult = Integer.compare(p1.getX(),p1.getX());
if (xResult != 0)
{
return xResult;
}
// Next by y
int yResult = Integer.compare(p1.getY(),p2.getY());
if (yResult != 0)
{
return yResult;
}
// Finally by rank
return Integer.compare(p1.getRank(),p2.getRank());
}
@Override
public String toString() {
return "["+x+' '+y+' '+rank+' '+"]";
}
public类实现了可比较的{//在这一行上抛出错误
私人INTX;
私营企业;
私有整数秩;
市中心公共区(int x、int y、int rank){
这个.x=x;
这个。y=y;
这个.等级=等级;
}
//x、y和秩的适当设置者和获取者
公共int getX(){
返回x;
}
公共无效集合x(整数x){
这个.x=x;
}
公共int getY(){
返回y;
}
公共空间设置(整数y){
这个。y=y;
}
public int getRank(){
返回等级;
}
公共无效设置秩(整数秩){
这个.等级=等级;
}
公共int比较(市区p1、市区p2)//实际比较
{
//这就是排序的顺序,先是x,后是y,最后是秩
//如果这给出一个结果,首先使用x-stop。
int xResult=Integer.compare(p1.getX(),p1.getX());
如果(xResult!=0)
{
返回结果;
}
//下一位是y
int yResult=Integer.compare(p1.getY(),p2.getY());
如果(yResult!=0)
{
返回yResult;
}
//最后按等级排列
返回整数.compare(p1.getRank(),p2.getRank());
}
@凌驾
公共字符串toString(){
返回“[”+x+“”+y+“”+rank+“”+“”+””;
}
compareTo方法应该将当前对象(此
)与其他对象进行比较。它不应该有两个参数进行比较。您可以这样编写方法
public int compareTo(Downtown p2)//Actual comparison
{
// This is so that the sort goes x first, y second and rank last
// First by x- stop if this gives a result.
int xResult = Integer.compare(getX(),p2.getX());
if (xResult != 0)
{
return xResult;
}
// Next by y
int yResult = Integer.compare(getY(),p2.getY());
if (yResult != 0)
{
return yResult;
}
// Finally by rank
return Integer.compare(getRank(),p2.getRank());
}
请注意,我如何将对
p1
的所有调用替换为对当前对象的调用。compareTo方法应该将当前对象(this
)与其他对象进行比较。它不应该有两个参数进行比较。您可以这样编写方法
public int compareTo(Downtown p2)//Actual comparison
{
// This is so that the sort goes x first, y second and rank last
// First by x- stop if this gives a result.
int xResult = Integer.compare(getX(),p2.getX());
if (xResult != 0)
{
return xResult;
}
// Next by y
int yResult = Integer.compare(getY(),p2.getY());
if (yResult != 0)
{
return yResult;
}
// Finally by rank
return Integer.compare(getRank(),p2.getRank());
}
请注意,我如何将对p1
的所有调用替换为对当前对象的调用。Java的Comparable
接口定义了compareTo
方法,如下所示:
int compareTo(T o);
这意味着该方法必须采用一个参数;另一个参数是对象本身,即This
。您需要实现此单参数方法而不是双参数方法来解决此问题
编译器将通过在方法上使用以下命令来帮助您解决此类问题:
@Override // Issues an error
public int compareTo(Downtown p1, Downtown p2)
@Override // Compiles fine
public int compareTo(Downtown other)
Java的Comparable
接口将compareTo
方法定义如下:
int compareTo(T o);
这意味着该方法必须采用一个参数;另一个参数是对象本身,即This
。您需要实现此单参数方法而不是双参数方法来解决此问题
编译器将通过在方法上使用以下命令来帮助您解决此类问题:
@Override // Issues an error
public int compareTo(Downtown p1, Downtown p2)
@Override // Compiles fine
public int compareTo(Downtown other)
compareTo
只接受一个参数:public int compareTo(闹市区p2)
。它应该将此
与p2
进行比较。compareTo()的签名错误。有关详细信息,请参阅。您的compareTo
函数实际上包含3个对象:p1
、p2、
和此
。这不是compareTo
的正确签名。提示:对应该被重写的方法使用@Override
注释。您将得到一个编译器错误r如果方法签名错误,compareTo
只接受一个参数:public int compareTo(闹市区p2)
。它应该将此
与p2
进行比较。compareTo()的签名错误。有关详细信息,请参阅。您的compareTo
函数实际上包含3个对象:p1
、p2、
和此
。这不是compareTo
的正确签名。提示:对应该被重写的方法使用@Override
注释。您将得到一个编译器错误r如果方法签名错误。,