java—比较对象并指定正确的值

kr98yfug  于 2021-07-12  发布在  Java
关注(0)|答案(4)|浏览(325)

你好,我试图比较我的类的两个支票帐户对象的余额,但我遇到了一些问题。

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()来纠正这个错误;但是,这将返回编译器错误“找不到符号”。如果你能解释一下原因,我会很感激的。

whhtz7ly

whhtz7ly1#

compareto方法的“other”参数应该是bankable,而不是object:

public int compareTo(Bankable other) { ... }

为了这个工作,你的 Bankable 类应该实现 Comparable<Bankable> 接口-听起来可能缺少类型参数 <Bankable> 或者你会得到一个不同的错误。bankable类声明应如下所示:

class Bankable implements Comparable<Bankable>

最后,以你实施的方式 compareTo ,它只能返回0或正数。一定有可能 compareTo 返回负数-这就是它如何告诉您当前的“this”对象应该在“other”对象之前。一种正确而紧凑的实现方法 compareTo 是:

public int compareTo(Bankable other) {
    return Integer.compare(this.getBalance(), other.getBalance());
}
a64a0gku

a64a0gku2#

替换 other = (Bankable) other;Bankable bankable = (Bankable) other; 以及 otherBalance = this.getBalance();otherBalance = bankable.getBalance(); .

oiopk7p5

oiopk7p53#

这条线

other = (Bankable) other;

因为变量 other 仍然属于 Object ,所以你还是不能打电话 Bankable 使用它的方法。
创建 Bankable 而不是变量。

Bankable that = (Bankable) other;

然后你可以打电话

int otherBalance = that.getBalance();
of1yzvn4

of1yzvn44#

看来你有几个问题: other = (Bankable) other 什么都不做,因为 other 总是一个 Object 类型。尝试创建一个 Bankable 具有 getBalance : Bankable otherBankable = (Bankable) other; 一旦你有了这个问题,你就可以解决另一个问题,在你设置的地方 otherBalancethis.getBalance() . 应该设置为 otherBankable.getBalance() 相反。
另一个不涉及创建另一个对象变量的解决方案是,当您想要获得平衡时,只需强制转换:

otherBalance = ((Bankable) other).getBalance();

相关问题