在Java中多次使用“this”关键字

时间:2011-02-17 06:02:11

标签: java

所以,我有这个。它比较了两个卡片组,如果它们相同,则结果为真。

public boolean equals ( Object obj ) {
      boolean result = true;
      for (int i = 0; i < 52; i++) {
          if (this.cardAt(i) = this2.cardlist(i)) {
              result = true;
          } else {
              result = false;
          }
      }
   }

如果愿意,我希望能够比较两个随机卡片组。 但我不知道如何使用“这个来比较两个不同的。 我只是写了“this2”来替换“this”的另一个实例。 我怎么能取代这个“this2”仍能比较两张卡片?

3 个答案:

答案 0 :(得分:4)

obj是您的this2

考虑这种改编:

public boolean equals ( Object obj) {
      if(!obj instanceof Deck) return false; // make sure you can cast
      Deck otherDeck = (Deck)obj // make the cast
      for (int i = 0; i < 52; i++) {
          if (!this.cardAt(i).equals(otherDeck.cardAt(i)) // use .equals() instead of ==
            return false; // return false on the first one that's wrong
      }
      return true;

 }

你的旧方法会有缺陷。假设有一张4张牌组: {4S,3C,5D,AH} 还有另外4张卡片组 {4S,10C,5D,AH}

走过他们

result = true
current index 0... compare 4S to 4S... good, so...
result = 4S == 4S ? true
result = 3C == 10C ? false
result = 5D == 5D ? true
result = AH == AH ? true

因此,您的方法仅测试LAST卡是否正确。 (当你完成它时它永远不会回来!)

答案 1 :(得分:0)

您可以将obj强制转换为您当前所在类的类型,如此

MyClass other = (MyClass)obj;
// Now do calculations using  other  instead of  this2.

答案 2 :(得分:0)

public boolean equals ( Object obj )
{
     boolean result = false; // No need of result variable
     for (int i = 0; i < 52; i++) {
         if (this.cardAt(i) == obj.cardlist(i)) // not = , it should be ==
         {
              return true;
         } 
     }
     return false;
}

编辑1:但是,此逻辑不会遍历整个cardlist。只测试相应的卡片是否相同。如果找到至少一个匹配,它将返回剩余的卡片进行比较,否则遍历整个列表。