2016-04-13 30 views
0

Bu neden çalışmıyor? Formula'dan başka hangi bilgilerin gerekli olacağını bir char ve int türünü yapan bir int tarafından verildiğinden emin değilim.Boolean'larla ArrayLists Karşılaştırılması

// 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. terimler Terim sınıfında yöntemlerini eşittir() ve hashCode() geçersiz kılmak gerek Sürenin iki nesneleri karşılaştırmak için ArrayList

+4

kullanarak bunları karşılaştırabilirsiniz, – Stultuske

+0

iyi bir eşitlik uygulaması yerine, o zaman terim boolean'a dönüştürülemez diyor. – Alfred

+4

Muhtemelen 'if (fTester == tester)' adresleri içeriyor ve içeriği karşılaştırmıyor. Özel nesneleri karşılaştırmak için 'equals 'uygulamasını uygulamanız ve kullanmanız gerekir. –

cevap

1

Sen == kullanarak, ancak nesnelerin içerikleri karşılaştırıldığında, böylece equals yöntemi kullanarak iki nesne karşılaştırmak gerekir. Term yana

özel sınıf, sen bu yöntemi kendini geçersiz kılmak gerekir:

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; 
    } 
} 

O zaman == operatörünü kullanarak Nesneleri karşılaştırdığınız belki

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

, 'equals()' i geçersiz kıldığında hashCode() 'da geçersiz kılmalı; Bahsetmeye değer olduğunu düşünüyorum. –

+0

@DmitryBychenko Çok doğru, ama bu temellerde sıkışmış olduğunuzda, '' hashCode() 'ile yapılan sözleşme sadece kafa karıştırıcı. – f1sh

0

adıdır. Kodunuz olacak:

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; 
} 
İlgili konular