Hi I have Card class… In another class I create an arrayList of Card objects. How would I go about sorting the arrayList based on the value of the card? The ace is the lowest card value and the king is the highest.
A,2,3,4,5,6,7,8,9,T,J,Q,K
public class Card {
char rank, suit;
public Card(char rank, char suit){
this.rank = rank;
this.suit = suit;
}
public void setCard(char rank, char suit){
this.rank = rank;
this.suit = suit;
}
public char getRank(){
return rank;
}
public char getSuit(){
return suit;
}
public void setRank(char rank){
this.rank = rank;
}
public void setSuit(char suit){
this.suit = suit;
}
public String toString(){
String str = "";
str += this.getRank();
str += this.getSuit();
return str;
}
public boolean equals(Object obj){
Card card = (Card) obj;
if(this.rank == card.getRank() && this.suit == card.getSuit()){
return true;
}
return false;
}
public boolean isValidCard(Card card){
char s = card.getSuit();
char r = card.getRank();
if(s=='H' || s=='S' || s=='D' || s=='C'){
if(r=='A' || r=='2' || r=='3' || r=='4' || r=='5' || r=='6' || r=='7' ||
r=='8' || r=='9' || r=='T' || r=='J' || r=='Q' || r=='K'){
return true;
}
}
return false;
}
public boolean allowedInHigherPiles(Card card, Game game, int pile){
if(pile>=5 && game.getPile(pile).cards.size()==0){
if(card.getRank()!='K')
return false;
}
return true;
}
}
One option is to implement the Comparable interface and then override compareTo
Once you’ve done that, sorting the list is easy with Collections.sort(myCollection);
You may be better of avoiding implementing Comparable and create a Comparator object, and there’s a version of Collections.sort that takes the comparator.
Your comparison function can can then simply check the rank of the cards, and return the result while ignoring the suit.
You may want to read the Java tutorial on all this ordering business.
Update: Bjorn points out correctly that Comparable should be used when the class has a natural sorting order. My personal view is that for cards there isn’t really a “natural order” since different games differ in their interpretation of the Ace, so it might be better to avoid assigning “semantics” by offering Comparable as part of the class.