Проблема с просмотром дубликатов LinkedHasSet - PullRequest
0 голосов
/ 13 октября 2019

Я создаю группу объектов Card.

public Card()
{
    cardSign = myRandomHelper.nextInt(3);
    this.setSign(this.getCardSign());
    this.cardValue = (byte) (myRandomHelper.nextInt(SIX) + ONE);
}   // End of Card

cardSign получает случайное число от нуля до двух, и на основании этого числа устанавливается знак для данного объекта Card.

в своем классе FullDeck я создаю LinkedHastSet

LinkedHashSet<Card> myFullDeck = new LinkedHashSet<Card>();

Затем я пытаюсь создать набор карточек, но дубликаты не обнаруживаются, а вместо этого добавляются в список.

public void createFullDeck()    {
    /**
     * while the amount of cards is not equal to eighteen .. 
     */
    while ( myFullDeck.size() != fullDeckLength )   {
        /**
         * create the first card as a random card
         */
        interCard = new Card();
        /**
         * if my deck is empty
         */
        if ( myFullDeck.isEmpty() == true ) {
            myFullDeck.add(interCard);  // make previously created card first in the deck
        }   // End of if ( myFullDeck.isEmpty() == true )
        /**
         * below line starts its execution after one item
         * was added to the deck
         */
        else if ( !myFullDeck.isEmpty() )   // any following card are placed in the deck    
        {
            if (myFullDeck.contains(interCard))
            {
                System.out.println("Copy");
            }
            else if(!myFullDeck.contains(interCard))
            {
                System.out.println("No Copy");
                myFullDeck.add(interCard);

            }

        /**
        *   if (myFullDeck.contains(interCard) == true )    // only after checking their copy presence in the deck
        *   {   while (myFullDeck.contains(interCard) == true)  {   interCard = new Card(); }   // End of while (myFullDeck.contains(interCard))
        *       myFullDeck.add(interCard);  }   // End of if (myFullDeck.contains(interCard))
        *   else if (myFullDeck.contains(interCard) == false)   {
        *       myFullDeck.add(interCard);  }   // End of else if (!myFullDeck.contains(interCard))
        */

        }   // End of else if ( myFullDeck.isEmpty() == false )
    }   // End of while ( myFullDeck.size() != fullDeckLength )
    System.out.println("My Full Deck : ");
    System.out.println(myFullDeck);
    Iterator<Card> myDeckIterator = myFullDeck.iterator();

      while(myDeckIterator.hasNext())
      {
          System.out.println(myDeckIterator.next());
      }

}   // End of public void createFullDeck()

Пожалуйста, помогите! Что я делаю не так?

РЕДАКТИРОВАТЬ 1:

/**
 * Below method: equalsTo
 * is in charge of comparing
 * two cards.
 * @return
 */
public boolean equalsTo(Card cardP)
{
    if((this.getCardSign() == cardP.getCardSign()) &&
            this.getCardValue() == cardP.getCardValue())
    {
        return true;
    }
    else
    {
        return false;
    }
}

1 Ответ

0 голосов
/ 13 октября 2019

Переопределение equalTo () в моем классе Card и его реализация в моем createDeck (), как предлагали некоторые из вас, ребята, сработали. Спасибо за ваши предложения и время!

/**
 * createPazackDeck method creates a deck of available cards
 * from which the side deck cards would be selected.
 */
public void createFullDeck()    {
    /**
     * while the amount of cards is not equal to eighteen .. 
     */
    while ( myFullDeck.size() != fullDeckLength )   {
        /**
         * create the first card as a random card
         */
        interCard = new Card();
        tripValue = false;

        /**
         * if my deck is empty
         */
        if ( myFullDeck.isEmpty() == true ) {
            myFullDeck.add(interCard);  // make previously created card first in the deck
        }   // End of if ( myFullDeck.isEmpty() == true )
        /**
         * below line starts its execution after one item
         * was added to the deck
         */
        else if ( !myFullDeck.isEmpty() && myFullDeck.size() < fullDeckLength)  // any following card are placed in the deck    
        {
            myDeckIterator = myFullDeck.iterator();

              while(myDeckIterator.hasNext())
              {
                  if (interCard.equalsTo(myDeckIterator.next()))
                  {
                      System.out.println("duplicate present");
                      tripValue = true;
                      break;
                  }
              }
              if (!myDeckIterator.hasNext() && tripValue == false)
              {
                  myFullDeck.add(interCard);
                  System.out.println("brake execution");
              }

        }   // End of else if ( myFullDeck.isEmpty() == false )
    }   // End of while ( myFullDeck.size() != fullDeckLength )
    System.out.println("My Full Deck : ");
    System.out.println(myFullDeck);

}   // End of public void createFullDeck()
...