1

Pair というオブジェクトの等価性をチェックするためのカスタム equals があります。

class Pair implements Comparable <Parr> {

double coef;
int power;

Pair(double a, int b) {
    coef = a; 
    power = b; 
}

私のカスタム equals メソッドは (クラス ペアにあります):

@Override
public boolean equals(Object o) {
    if (!(o instanceof Pair))
        return false; 
    Pair that = (Pair) o; 
    return that.coef == this.coef && that.power == this.power; 
}

オブジェクトが同じかどうかをprint my objectで確認しましたが、実際には同じです。

1.0 1 2.0 0
1.0 1 2.0 0 

Test という別のファイルからカスタム equals を呼び出します。

class Test {

public static void main(String[] args) {
    orig = pol1.differentiate().integrate();
    System.out.print(orig);
    if (orig.equals(pol1))
        System.out.println(" (is equal.)");
    else
    System.out.println(" (is not equal.)"); 

そして、ペアのオブジェクトを内部に持つ配列リストである私のクラスPolynomial。

class Polynominal implements PolynominalInterface {


ArrayList<Pair> terms = new ArrayList<Pair>(); 

インターネットで調べたところ、Equals メソッドで == を使用できないことがわかりましたが、Intergers と Doubles を使用しているため、equals() は機能しません。

誰かが私を正しい方向に向けることができますか?

4

5 に答える 5

3

origとがthenpol1のインスタンスである場合Polynomial

if (orig.equals(pol1))

Polynomial#equals()同様に実装した場合にのみ機能します。これにより、2 つArrayListの s が繰り返され、個々Pairの s が等しいことが確認されます (Pair#equals()もちろん使用します)。

于 2013-10-13T16:27:02.740 に答える
2

OK、Ravi Thapliyal のおかげで解決策が見つかりました。

Polynominal クラスにカスタム equals メソッドを追加した後、問題は修正されました。

@Override
public boolean equals(Object o) {
    if (!(o instanceof Polynomial))
        return false; 
    Polynomial that = (Polynomial) o; 
    return that.terms.equals(terms); 
}
于 2013-10-13T16:36:26.297 に答える
0

== の代わりにDouble.compare(double, double)メソッドを使用します。

Java では、浮動小数点比較は「あいまい」です。

于 2013-10-13T16:29:44.317 に答える
0

次のような Polynomail.equals() メソッドを実装する必要があります。

public boolean equals(Object o) {
  if (!(o instanceof Polynomial)) return false;

  Polynomial other = (Polynomial) o;

  if (this.terms==null && other.terms==null) return true;

  // A suitable equals() method already exists for ArrayList, so we can use that
  // this will in turn use Pair.equals() which looks OK to me
  if (this.terms!=null && other.terms!=null) return this.terms.equals(other.terms);

  return false;
}
于 2013-10-13T16:37:28.953 に答える