【问题标题】:Comparing ArrayLists with Booleans [duplicate]将 ArrayLists 与布尔值进行比较 [重复]
【发布时间】:2016-04-13 09:31:24
【问题描述】:

为什么这不起作用? 我不确定除了 Formula 之外您还需要哪些其他信息是由 char 和 int 提供的,它们构成了一个类型 Term。

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

注意terms 是 ArrayList 的名称

【问题讨论】:

  • 可能是因为您使用 == 运算符比较对象,而不是一个好的 equals 实现
  • 该死,然后它说 Term 不能转换为布尔值。
  • 可能是因为if(fTester == tester) 比较的是地址而不是内容。您需要实现equals 并使用它来比较自定义对象。
  • "那么" ?什么时候? = 不是一个 equals 实现,它是一个用于赋值的运算符。
  • 如何使用equals方法?

标签: java arraylist boolean


【解决方案1】:

您需要比较两个对象,而不是使用==,而是使用equals 方法,以便比较对象的内容。

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

【讨论】:

  • 当覆盖equals() 时,也必须覆盖hashCode();我认为值得一提。
  • @DmitryBychenko 非常正确,但是当您停留在这些基础上时,与hashCode() 的合同只会令人困惑。
【解决方案2】:

为了比较 Term 的两个对象,您需要覆盖 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; 
}

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多