简体   繁体   中英

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM