What you should be considering for this sort of classification is Enums:
public enum Suit {
Hearts, Spades, Diamonds, Clubs;
}
public enum Card {
A, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K;
}
This benefits your situation since enums can be assigned value easily, to whatever you like, and then they can be compared based on this value.
In fact, the Java documentation provides a card game for the introduction to enums.
For your first question, you could map a card name to its value:
Map<String, Integer> values = new HashMap<String, Integer>();
values.put("A", 11);
values.put("2", 2);
// ...
values.put("King", 10);
// lookup a value:
int kingValue = values.get("King");
For the second, I'd rely on java shuffle function. Create a list of all cards
ArrayList<Card> deck = someMagicMethodToPopulateTheList();
and then simply shuffle the deck
Collections.shuffle(deck);
Now you can iterate through the deck and you will see the cards in a random order:
for (Card card:deck) {
System.out.println(card);
}
Note: the Card
class does not extist (yet). I simply invented the name to keep it simple)
this is probably more than you need, but you can do a lot with enums:
package sample;
import java.util.*;
enum Rank {
joker(new Character('*'),"Joker"),aceLow(new Character('a'),"Ace(low)"),deuce(new Character('2'),"Deuce"),trey(new Character('3'),"Trey"),four(new Character('4'),"Four"),five(new Character('5'),"Five"),six(new Character('6'),"Six"),seven(new Character('7'),"Seven"),eight(new Character('8'),"Eight"),nine(new Character('9'),"Nine"),ten(new Character('T'),"Ten"),jack(new Character('J'),"Jack"),queen(new Character('Q'),"Queen"),king(new Character('K'),"King"),aceHigh(new Character('A'),"Ace");
Rank(final Character c,final String s) {
this.c=c;
this.s=s;
}
public static Rank fromInt(int n) {
for(Rank r:Rank.values())
if(r.ordinal()==n)
return r;
return null;
}
public static Rank fromCharacter(char c) {
for(Rank r:Rank.values())
if(r.c==c)
return r;
return null;
}
public static Rank[] fromCharacters(final String cards) {
final Rank[] rank=new Rank[5];
for(int i=0;i<5;i++)
rank[i]=Rank.fromCharacter(cards.charAt(i));
return rank;
}
public Character toCharacter() {
return c;
}
public String toString() {
return s;
}
public static String toString(final Rank[] rank) {
String s="";
for(Rank r:rank)
s+=r.toCharacter();
return s;
}
final Character c;
final String s;
}
enum Suit {
joker(new Character('*'),"Joker"),clubs(new Character('c'/* try character for a real dimond? */),"Club"),diamonds(new Character('d'),"Diamond"),hearts(new Character('h'),"Heart"),spades(new Character('s'),"Spade");
Suit(final Character c,final String s) {
this.c=c;
this.s=s;
}
public static Suit fromCharacter(char c) {
for(Suit s:Suit.values())
if(s.c==c)
return s;
return null;
}
public Character toCharacter() {
return c;
}
public String toString() {
return s;
}
public static String toString(final Suit[] suit) {
String s_="";
for(Suit s:suit)
s_+=s.toCharacter();
return s_;
}
public static boolean areSuited(final Suit[] suit) {
final int n=suit.length;
for(int i=0;i<n-1;i++)
if(suit[i]!=suit[i+1])
return false;
return true;
}
final Character c;
final String s;
}
enum Card {
joker(Rank.joker,Suit.joker),
aceLowOfClubs(Rank.aceLow,Suit.clubs),
aceLowOfDiamonds(Rank.aceLow,Suit.diamonds),
aceLowOfHearts(Rank.aceLow,Suit.hearts),
aceLowOfSpades(Rank.aceLow,Suit.spades),
dueceOfClubs(Rank.deuce,Suit.clubs),
dueceOfDiamonds(Rank.deuce,Suit.diamonds),
dueceOfHearts(Rank.deuce,Suit.hearts),
dueceOfSpades(Rank.deuce,Suit.spades),
treyOfClubs(Rank.trey,Suit.clubs),
treyOfDiamonds(Rank.trey,Suit.diamonds),
treyOfHearts(Rank.trey,Suit.hearts),
treyOfSpades(Rank.trey,Suit.spades),
fourOfClubs(Rank.four,Suit.clubs),
fourOfDiamonds(Rank.four,Suit.diamonds),
fourOfHearts(Rank.four,Suit.hearts),
fourOfSpades(Rank.four,Suit.spades),
fiveOfClubs(Rank.five,Suit.clubs),
fiveOfDiamonds(Rank.five,Suit.diamonds),
fiveOfHearts(Rank.five,Suit.hearts),
fiveOfSpades(Rank.five,Suit.spades),
sixOfClubs(Rank.six,Suit.clubs),
sixOfDiamonds(Rank.six,Suit.diamonds),
sixOfHearts(Rank.six,Suit.hearts),
sixOfSpades(Rank.six,Suit.spades),
sevenOfClubs(Rank.seven,Suit.clubs),
sevenOfDiamonds(Rank.seven,Suit.diamonds),
sevenOfHearts(Rank.seven,Suit.hearts),
sevenOfSpades(Rank.seven,Suit.spades),
eightOfClubs(Rank.eight,Suit.clubs),
eightOfDiamonds(Rank.eight,Suit.diamonds),
eightOfHearts(Rank.eight,Suit.hearts),
eightOfSpades(Rank.eight,Suit.spades),
nineOfClubs(Rank.nine,Suit.clubs),
nineOfDiamonds(Rank.nine,Suit.diamonds),
nineOfHearts(Rank.nine,Suit.hearts),
nineOfSpades(Rank.nine,Suit.spades),
tenOfClubs(Rank.ten,Suit.clubs),
tenOfDiamonds(Rank.ten,Suit.diamonds),
tenOfHearts(Rank.ten,Suit.hearts),
tenOfSpades(Rank.ten,Suit.spades),
jackOfClubs(Rank.jack,Suit.clubs),
jackOfDiamonds(Rank.jack,Suit.diamonds),
jackOfHearts(Rank.jack,Suit.hearts),
jackOfSpades(Rank.jack,Suit.spades),
queenOfClubs(Rank.queen,Suit.clubs),
queenOfDiamonds(Rank.queen,Suit.diamonds),
queenOfHearts(Rank.queen,Suit.hearts),
queenOfSpades(Rank.queen,Suit.spades),
kingOfClubs(Rank.king,Suit.clubs),
kingOfDiamonds(Rank.king,Suit.diamonds),
kingOfHearts(Rank.king,Suit.hearts),
kingOfSpades(Rank.king,Suit.spades),
aceOfClubs(Rank.aceHigh,Suit.clubs),
aceOfDiamonds(Rank.aceHigh,Suit.diamonds),
aceOfHearts(Rank.aceHigh,Suit.hearts),
aceOfSpades(Rank.aceHigh,Suit.spades);
private Card(Rank rank,Suit suit) {
this.rank=rank;
this.suit=suit;
}
public Rank rank() {
return rank;
}
public Suit suit() {
return suit;
}
public String toString() {
if(rank.equals(Rank.joker)||suit.equals(Suit.joker))
return "Joker";
else return rank+" of "+suit+'s';
}
public static String toString(final Card[] card) {
String s=new String();
for(int i=0;i<card.length;i++) {
if(i>0)
s+=", ";
s+=card[i].toCharacters();
}
return s;
}
public String toCharacters() {
return ""+rank().toCharacter()+suit().toCharacter();
}
public static Card instance(Rank rank,Suit suit) { // some hack for speed
final int n=4*rank.ordinal()+suit.ordinal();
//System.out.println(rank+" "+suit+" "+n);
return element[4*rank.ordinal()+suit.ordinal()];
}
static Card[] create(int standards,int jokers) {
int cards=0;
Card card[]=new Card[standards*52+jokers];
for(int i=0;i<standards;i++)
for(Suit suit:EnumSet.range(Suit.clubs,Suit.spades))
for(Rank rank:EnumSet.range(Rank.deuce,Rank.aceHigh))
card[cards++]=instance(rank,suit);
for(int i=0;i<jokers;i++)
card[cards++]=instance(Rank.joker,Suit.joker);
return card;
}
private final Rank rank;
private final Suit suit;
private static final Card element[]={joker,joker,joker,joker,joker,aceLowOfClubs,aceLowOfDiamonds,aceLowOfHearts,aceLowOfSpades,dueceOfClubs,dueceOfDiamonds,dueceOfHearts,dueceOfSpades,treyOfClubs,treyOfDiamonds,treyOfHearts,treyOfSpades,fourOfClubs,fourOfDiamonds,fourOfHearts,fourOfSpades,fiveOfClubs,fiveOfDiamonds,fiveOfHearts,fiveOfSpades,sixOfClubs,sixOfDiamonds,sixOfHearts,sixOfSpades,sevenOfClubs,sevenOfDiamonds,sevenOfHearts,sevenOfSpades,eightOfClubs,eightOfDiamonds,eightOfHearts,eightOfSpades,nineOfClubs,nineOfDiamonds,nineOfHearts,nineOfSpades,tenOfClubs,tenOfDiamonds,tenOfHearts,tenOfSpades,jackOfClubs,jackOfDiamonds,jackOfHearts,jackOfSpades,queenOfClubs,queenOfDiamonds,queenOfHearts,queenOfSpades,kingOfClubs,kingOfDiamonds,kingOfHearts,kingOfSpades,aceOfClubs,
aceOfDiamonds,aceOfHearts,aceOfSpades};
}