user8917573
user8917573

Reputation:

How do can create a remove method for a Java Card Class

How do can create a remove method for this Java Card Class?

Card class:

public class Card {
    
    private int value;
    private String rank;
    private String suit;
    
    public Card(String s, String r, int v) { suit=s;rank=r;value=v; }

    public int getValue() {return value;}
    public String getRank() {return rank;}
    public String getSuit() {return suit;}
}

The deck class with the remove method. (Edit: I fixed the display method to not show the null cards and made the size return all cards discluding the null ones. The remove is also fixed. Thanks.)

public class Deck01 {
    
    private Card[] cards; //the deck
    private int size;     //size of deck and used for index for add()
    
    public Deck01(){
        cards = new Card[52];
        int size = 0;
    }
    
    //add a new card to cards[] at index=size
    public void add(String suit, String rank, int value){
        Card temp = new Card(suit,rank,value);
        cards[size] = temp;
        size++;
    }
    
    public void remove(String suit, String rank, int value){
        Card temp = new Card(suit,rank,value);
        
        //iterate through deck
        for (int s = 0;s<size;s++) {

            if ((temp.getValue())  == (-1)
                    &&temp.getRank()==(null)
                    &&temp.getSuit()==(null)) {
                s++;
            }
            if (temp.getValue()==(cards[s].getValue())
                    &&temp.getRank().equals(cards[s].getRank())
                    &&temp.getSuit().equals(cards[s].getSuit())) {
                cards[s]= new Card(null,null,-1);//remove card
            
            }
        }
        
    }
    
...
}

Upvotes: 0

Views: 839

Answers (2)

Aggy
Aggy

Reputation: 11

You can try using LinkedList for this purpose. Here is my code which works. You were doing mistake in your remove function. You should remove by index not size. Well here you don't even need size variable.

import java.util.LinkedList;
import java.util.List;

public class Deck01 {
    private List<Card> cards;

    public Deck01(){
        cards = new LinkedList<>();
    }
    public void add(String suit, String rank, int value){
        Card temp = new Card(suit,rank,value);
        cards.add(temp);
    }

    public void remove(String suit, String rank, int value){
        Card temp = new Card(suit,rank,value);
        for (int s = 0;s<cards.size();s++) {
            Card tempCard = cards.get(s);
            if (temp.getValue()==(tempCard.getValue())
                    &&temp.getRank().equals(tempCard.getRank())
                    &&temp.getSuit().equals(tempCard.getSuit())) {
                cards.remove(tempCard);
                break;
            }
        }
    }

    public void display() {
        System.out.println(cards);
    }

    public int getSize(){return cards.size();}

    public boolean isEmpty(){ return cards.isEmpty(); }

    @Override
    public String toString() {
        return "Deck01 [cards=" + cards + ", size=" + cards.size() + "]";
    }

    public static void main(String[] args) {
        Deck01 deck =new Deck01();

        System.out.println(deck.getSize());
        System.out.println(deck.isEmpty());
        deck.add("Clovers","Jack",11);
        deck.add("Diamonds","King",13);
        deck.add("Hearts","Queen",12);
        deck.add("Spades","9",9);
        deck.add("Clovers","7",7);
        deck.add("Diamonds","Ace",1);
        deck.add("Hearts","Jack",11);
        deck.add("Spades","Ace",1);
        deck.add("Clovers","3",3);
        deck.add("Diamonds","5",5);

        deck.display();
        System.out.println(deck.isEmpty());
        System.out.println(deck.getSize());

        deck.remove("Diamonds","5",5);
        deck.remove("Spades","Ace",1);
        deck.display();
        System.out.println(deck.getSize());
    }
}

Upvotes: 0

Happy
Happy

Reputation: 88

you can't change the size of an array,
I suggest using an ArrayList

private List<Card> deck = new ArrayList();

//you don't need class Deck anymore

deck.add(new Card("Clovers","Jack",11)); // to add
deck.remove(new Card("Clovers","Jack",11)); // to remove
System.out.println(deck.size()); // to print n. of cards

// to display
for (Card c: deck){
    System.out.println(c);
}

Upvotes: 1

Related Questions