开发者

Multiple uses of "this" keyword in Java

开发者 https://www.devze.com 2023-02-10 19:35 出处:网络
So, I have this. It compares two card decks and if they are the same the result is true. public boolean equals ( Object obj ) {

So, I have this. It compares two card decks and if they are the same the result is true.

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

I would like to be able to compare two random card decks, if you will. But I don't know how to compare two different on开发者_JAVA百科es using "this . I simply wrote "this2" to replace another instance of "this". What could I do to replace this "this2" to still be able to compare two card decks?


obj is your this2

Consider this adaptation:

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;

 }

Your old method would have been flawed. Let's say there's a 4 card deck: { 4S, 3C, 5D, AH } And another 4 card deck { 4S, 10C, 5D, AH}

Walk through them

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

So your method only tests if the LAST card is correct. (Also it never returns when you're done!)


You would cast obj to the type of class you are currently in, like so

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


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

Edit 1: However, this logic do not traverse the entire cardlist. Just tests whether the corresponding cards are equal or not. If found at least one match, it returns leaving the rest of cards to be compared, else traverses the entire list.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号