Reputation:
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
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
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