Witam Mam kartę Card ... W innej klasie tworzę tablicęList obiektów Card. Jak chciałbym posortować listę arrayList na podstawie wartości karty? As jest najniższą wartością karty, a król jest najwyższy.Java Sortowanie obiektu w ArrayList
A, 2,3,4,5,6,7,8,9, t, J, P, 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;
}
}
Ponieważ talia kart ma naturalny porządek Polecam przy użyciu interfejs porównywalny nad osobnej klasy porównawczej. Klasy komparatorów powinny być używane, gdy obiekt nie ma naturalnej kolejności sortowania, takiej jak klasa Shoe. Różni ludzie sortują swoje buty na różne sposoby (według koloru, rozmiaru, ceny). :-) –
Bjorn: Zgadzam się z tym wyjątkiem, że rola asa zmienia się w wielu grach (np. BJ i pokerze), więc byłbym ostrożny dodając semantykę do kart. – Uri