2016-04-13 19 views
0

なぜこれは機能しませんか? 数式とは別の情報が必要なのかどうか分からないのは、型Termを作るcharとintで与えられます。アレイリストとブール値の比較

// returns true if f is identical to this Formula 
// e.g. terms = {Term('C',2),Term('H',6)} and f = {Term('C',2),Term('H',6)} would return true 
// but terms = {Term('C',2),Term('H',6)} and f = {Term('H',6),Term('C',2)} would return false 

public boolean identical(Formula f) 
{ 
    int fSize = f.getTerms().size(); 

    if(fSize!=terms.size()) 
    { 
     return false; 
    } 
    else 
    { 
     for(int j = 0; j < fSize; j++) 
     { 
      Term tester = terms.get(j); 
      Term fTester = f.getTerms().get(j); 

      if(fTester == tester) 
      { 
       continue; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 

    return true; 
} 

N.B. termsはArrayListの名前です

+4

を使用してそれらを比較することができ、実装が – Stultuske

+0

と違う場合、Termはブール値に変換できません。 – Alfred

+4

おそらく 'if(fTester == tester)'はアドレスと内容を比較しないためです。 'equals'を実装し、それを使ってカスタムオブジェクトを比較する必要があります。 –

答えて

1

あなたは、オブジェクトの内容が比較されるように==を使用しますが、equals方法を使用していない2つのオブジェクトを比較する必要があります。 Term以来

は、カスタムクラスである、あなたは、このメソッドを自分で上書きする必要があります。

class Term { 
    char c; //the two values inside your Term class 
    int i; 

    @Override 
    public boolean equals(Object o){ 
    //checks omitted 
    Term other = (Term)o; 
    //now compare the contents: 
    return i==other.i && c==other.c; 
    } 
} 

あなたは==演算子を使用してオブジェクトを比較しているので、次にあなたが多分

if(fTester.equals(tester)){ 
    continue; 
} 
+0

'equals()'をオーバーライドする場合、 'hashCode()'もオーバーライドする必要があります。私はそれが言及する価値があると思います。 –

+0

@DmitryBychenko非常に真実ですが、あなたがこれらの基本を熟知している場合、 '' hashCode() ''との契約は混乱するだけです。 – f1sh

0

Termの2つのオブジェクトを比較するには、Termクラスのequals()メソッドとhashCode()メソッドをオーバーライドする必要があります。あなたのコードは次のようになります。

public boolean identical(Formula f) 
{ 
    int fSize = f.getTerms().size(); 
    if(fSize!=terms.size()){ 
     return false; 
    } else { 
     for(int j = 0; j < fSize; j++){ 
      Term tester = terms.get(j); 
      Term fTester = f.getTerms().get(j); 
      if(fTester.equals(tester)){ 
       continue; 
      } 
      else { 
       return false; 
      } 
     } 
    } 

    return true; 
} 
関連する問題