[2015-05-25] Challenge #216 [Easy] Texas Hold 'Em 1 of 3 - Let's deal.

My first big attempt at OOP in Java. I designed it with the intent of adding other card games to play in the future. Please criticize and let me know how I did. import java.util.; import java.lang.;

public class CardGame{

public static void main(String[] args){

    TexasHoldem game = new TexasHoldem();
    game.play();
}

}

class Card{

private String suit;
private String value;

public Card(String valueInput, String suitInput){

    value = valueInput;
    suit = suitInput;
}

public String getSuit(){

    return suit;
}

public String getValue(){

    return value;
}

public String toString(){

    return value + " of " + suit;
}

}

class Deck{

private List<Card> deck;
private String[] suits = {"Hearts", "Clubs", "Spades", "Diamonds"};
private String[] values = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

public Deck(){

    deck = new ArrayList<Card>();
    for(int i = 0; i < values.length; i++){
        for(int j = 0; j < suits.length; j++){

            deck.add(new Card(values[i], suits[j]));
        }
    }

    shuffle();
}

public void shuffle(){

    Random rand = new Random();
    for(int i = deck.size(); i > 0; i--){

        int index = rand.nextInt(i);
        Card temp = deck.get(index);
        deck.set(index, deck.get(i - 1));
        deck.set(i - 1, temp);
    }
}

public Card getCard(){

    Random rand = new Random();
    int index = rand.nextInt(deck.size());
    Card output = deck.get(index);
    deck.remove(index);
    return output;
}

public String toString(){

    for(Card c : deck) System.out.println(c);
    return "";
}

}

class CPU{

public List<Card> cpuCards;
private String name;

public CPU(String nameInput){

    name = nameInput;
    cpuCards = new ArrayList<Card>();
}

public void addCard(Card card){

    cpuCards.add(card);
}

public void removeCard(Card card){

    cpuCards.remove(cpuCards.indexOf(card));
}

public String toString(){

    String output = name + "\n";
    for(Card c : cpuCards) output += c.toString() + "\n";
    return output;
}

}

class TexasHoldem{

private Deck deck = new Deck();
private List<Card> table;
private List<CPU> computers;
private CPU player;

public TexasHoldem(){

    table = new ArrayList<Card>();
    computers = new ArrayList<CPU>();
    Scanner scan = new Scanner(System.in);

    System.out.println("How many players (2 - 8)?");
    int amount = scan.nextInt();

    player = new CPU("Redditor");
    for(int k = 0; k < 2; k++) player.addCard(deck.getCard());

    for(int i = 1; i < amount; i++){

        CPU cpu = new CPU("CPU" + i);
        for(int j = 0; j < 2; j++) cpu.addCard(deck.getCard());
        computers.add(cpu);
    }

}

public String getFlop(){

    String flop = "Flop" + "\n";
    for(int i = 0; i < 3; i++){

        Card c = deck.getCard();
        table.add(c);
        flop += c.toString() + "\n";
    }

    return flop;
}

public String getTurn(){

    Card c = deck.getCard();
    table.add(c);
    return "Turn" + "\n" + c;
}

public String getRiver(){

    Card c = deck.getCard();
    table.add(c);
    return "River" + "\n" + c;
}

public void play(){

    System.out.println(player);
    for(CPU cpu : computers) System.out.println(cpu);
    System.out.println(getFlop());
    System.out.println(getTurn() + "\n");
    System.out.println(getRiver());
}

}

/r/dailyprogrammer Thread