你好,我试图比较我的类的两个支票帐户对象的余额,但我遇到了一些问题。
public int compareTo(Object other) {
int otherBalance = 0;
other = (Bankable) other;
otherBalance = this.getBalance();
if (otherBalance > getBalance()) {
return otherBalance - getBalance();
}
else if (otherBalance < getBalance()) {
return getBalance() - otherBalance;
}
else
return 0;
}
上面的代码有一个逻辑错误,使得otherbalance等于错误对象的balance。这导致对此方法的调用始终返回0。
我试图通过设置otherbalance=other.getbalance()来纠正这个错误;但是,这将返回编译器错误“找不到符号”。如果你能解释一下原因,我会很感激的。
4条答案
按热度按时间whhtz7ly1#
compareto方法的“other”参数应该是bankable,而不是object:
为了这个工作,你的
Bankable
类应该实现Comparable<Bankable>
接口-听起来可能缺少类型参数<Bankable>
或者你会得到一个不同的错误。bankable类声明应如下所示:最后,以你实施的方式
compareTo
,它只能返回0或正数。一定有可能compareTo
返回负数-这就是它如何告诉您当前的“this”对象应该在“other”对象之前。一种正确而紧凑的实现方法compareTo
是:a64a0gku2#
替换
other = (Bankable) other;
与Bankable bankable = (Bankable) other;
以及otherBalance = this.getBalance();
与otherBalance = bankable.getBalance();
.oiopk7p53#
这条线
因为变量
other
仍然属于Object
,所以你还是不能打电话Bankable
使用它的方法。创建
Bankable
而不是变量。然后你可以打电话
of1yzvn44#
看来你有几个问题:
other = (Bankable) other
什么都不做,因为other
总是一个Object
类型。尝试创建一个Bankable
具有getBalance
:Bankable otherBankable = (Bankable) other;
一旦你有了这个问题,你就可以解决另一个问题,在你设置的地方otherBalance
至this.getBalance()
. 应该设置为otherBankable.getBalance()
相反。另一个不涉及创建另一个对象变量的解决方案是,当您想要获得平衡时,只需强制转换: