我的 class 没有覆盖抽象方法 compareTo
My class does not override abstract method compareTo
我的 class 详细介绍了市中心餐馆的属性,所述属性是 x/y 位置和等级。问题是,每当我 运行 程序它抛出一个错误,说非抽象 class "Downtown" 不覆盖抽象方法 "compareTo"。我不能使这个 class 抽象,因为我需要在这段代码之外初始化对象。我的程序哪里出错了?我的 compareTo 实现有问题吗?任何建议将不胜感激。
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+' '+"]";
}
compareTo
方法应该将 current 对象 (this
) 与 one other 进行比较。它不应该有 两个 参数进行比较。你可以这样写你的方法。
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<T>
接口定义compareTo
方法如下:
int compareTo(T o);
这意味着该方法必须接受一个参数;另一个参数是对象本身,即 this
。您需要实现这个单参数方法来代替您的双参数方法来解决这个问题。
编译器将通过在您的方法上使用 @Override
annotation 来帮助您解决此类问题:
@Override // Issues an error
public int compareTo(Downtown p1, Downtown p2)
@Override // Compiles fine
public int compareTo(Downtown other)
我的 class 详细介绍了市中心餐馆的属性,所述属性是 x/y 位置和等级。问题是,每当我 运行 程序它抛出一个错误,说非抽象 class "Downtown" 不覆盖抽象方法 "compareTo"。我不能使这个 class 抽象,因为我需要在这段代码之外初始化对象。我的程序哪里出错了?我的 compareTo 实现有问题吗?任何建议将不胜感激。
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+' '+"]";
}
compareTo
方法应该将 current 对象 (this
) 与 one other 进行比较。它不应该有 两个 参数进行比较。你可以这样写你的方法。
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<T>
接口定义compareTo
方法如下:
int compareTo(T o);
这意味着该方法必须接受一个参数;另一个参数是对象本身,即 this
。您需要实现这个单参数方法来代替您的双参数方法来解决这个问题。
编译器将通过在您的方法上使用 @Override
annotation 来帮助您解决此类问题:
@Override // Issues an error
public int compareTo(Downtown p1, Downtown p2)
@Override // Compiles fine
public int compareTo(Downtown other)