title: Blackjack Program, No Idea Where to Start
body: <p>So I have a programming assignment to create a blackjack program. All I need to do is create the methods for it for the class BlackJackHand. Im pretty lost. Are my variables I have so far correct? Here is BlackJackHand:
  package blackjack;</p>
  
  <pre><code>public class BlackjackHand {
      static final int MAX_HAND_SIZE = 5;
      public PlayingCard[] hand;
      public int numCards;
      private DeckOfCards[] deck;
  
      // an array of cards
      // number of cards in the hand
      // the deck this hand draws cards from
  
      // This constructor creates a new BlackjackHand using the provided deck.
      // Tip: Initialize all data fields, allocate space for the array of 5 cards,
      // then deal two cards from the deck into cards[0] and cards[1].
      // You'll have 2 cards in your hand, at this point.
      public BlackjackHand(DeckOfCards deck) {
       deck = new DeckOfCards();
     hand = new PlayingCard[5];  
     hand[0] = deck.dealACard();
     hand[1] = deck.dealACard();
  
      }
  
      // This method returns the point value of the hand.  It is a simple sum
      // of the PlayingCard values in the hand, except that an ace can count as
      // either 1 or 11 points.
      // Tip: Pretend the ace rule doesn;t exist, and sum up your card values.
      // If the sum is &lt; 12, and there is an ace in the hand, then increment the
      // point value by 10 before returning it.
      public int valueOfHand() {
  
          return (0);
      }
  
      // Print out the names of all cards in the hand.
      // Tip: Don't iterate through all 5 cards, necessarily.  Use numCards
      // as the bound in your loop.
      public void printHand() {
  
      }
  
      // Return the number of cards in the hand.
      public int sizeOfHand() {
          return 0;
      }
  
      // Return the most recently dealt card in the hand.
      // Tip: That'll be the card at index numCards-1
      PlayingCard mostRecentCard() {
          return null;
      }
  
      // Draw a card from the deck.  If the hand already had 5 cards,
      // print out an error message instead.
      // Tip: Put the card from the deck into the array of cards at
      // index numCards, then increment numCards.
      public void hitMe() {
         if (numCards == 5){
             System.out.println("You already have 5 cards.");
  
         }//if
         else {
  
         }//else
      }//hitMe
  </code></pre>
  
  <p>Here is the class PlayingCards</p>
  
  <pre><code>package blackjack;
  
  public class PlayingCard {
      private String suit; // "clubs", "diamonds", "hearts" or "spades"
      private int cardFace; // the value on the card. 1 for ace, 2 for 2, 13 for king, etc
  
      // constructor
      public PlayingCard(int v, String s) {
          cardFace = v;
          suit = s;
      }
  
      // Is this card an Ace?
      boolean isAce() {
          if(cardFace == 1) {
              return true;
          } else {
              return false;
          }
      }
      // return the blackjack point value of this card
      public int pointValue() {
         if(cardFace &gt; 10) {
             return 10;
         } else {
             return cardFace;
         }
      }
  
      // make a string of the name of the card
      public String name() {
          String temp = "";
  
          // concatenate the String equivalent of cardFace to temp
          if(cardFace == 1) {
              temp += "Ace";
          } else if(cardFace == 11) {
              temp += "Jack";
          } else if(cardFace == 12) {
              temp += "Queen";
          } else if(cardFace == 13) {
              temp += "King";
          } else { // a number card
              temp += cardFace; // implcit type conversion of cardFace into String
          }
  
          // concatenate the name together
          temp = temp + " of " + suit;
          return temp;
      }
  }
  </code></pre>
  
  <p>Here is the class DeckOfCards:</p>
  
  <p>package blackjack;
  import java.util.Random;</p>
  
  <p>public class DeckOfCards {</p>
  
  <pre><code>private PlayingCard[] cards;
  private int topOfDeck; // array index that's "the top of the deck"
  
  public DeckOfCards() {
      cards = new PlayingCard[52];
      for (int i = 1; i &lt;= 13; i++) { // make all the "hearts" cards
          cards[i - 1] = new PlayingCard(i, "hearts");
      }
      for (int i = 1; i &lt;= 13; i++) { // make all the "hearts" cards
          cards[i - 1 + 13] = new PlayingCard(i, "clubs");
      }
      for (int i = 1; i &lt;= 13; i++) { // make all the "hearts" cards
          cards[i - 1 + 26] = new PlayingCard(i, "diamonds");
      }
      for (int i = 1; i &lt;= 13; i++) { // make all the "hearts" cards
          cards[i - 1 + 39] = new PlayingCard(i, "spades");
      }
      topOfDeck = 51;
  }
  
  public PlayingCard dealACard() {
      PlayingCard temp = cards[topOfDeck];
      topOfDeck--;
      return temp;
  }
  
  public void shuffle() {
      PlayingCard[] tempArray = new PlayingCard[52];
  
      Random r = new Random();
      for (int i = topOfDeck; i &gt;= 0; i--) {
          int index = r.nextInt(i + 1); // the index of a random card in the deck
          tempArray[i] = cards[index];
          // swap cards[i] with cards[index]
          PlayingCard tempCard = cards[i];
          cards[i] = cards[index];
          cards[index] = tempCard;
      }
      // at this point, tempArray has all the cards selected in random order
      cards = tempArray;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>And finally the main class BlackJack:</p>
  
  <pre><code>package blackjack;
  
  public class Blackjack {
      static final int WINNING_LIMIT = 21;
      static final int STAND_VALUE = 17;
  
  
      public static void main(String[] args) {
          DeckOfCards deck = new DeckOfCards();
          deck.shuffle();
  
          // dealer's starting hand
          System.out.println("Let's play a hand of Blackjack!\nFirst, it's Dealer's turn.");
          BlackjackHand theDealer = new BlackjackHand(deck);
          System.out.println("Dealer begins with a hand of value " + theDealer.valueOfHand() + ":");
          theDealer.printHand();
  
          // dealer hits until he stands
          while (theDealer.valueOfHand() &lt; STAND_VALUE) {
              if (theDealer.sizeOfHand() &gt;= BlackjackHand.MAX_HAND_SIZE) { // 5 cards under 21: auto-win
                  System.out.println("Dealer has drawn a hand of 5 cards, of value " + theDealer.valueOfHand() + ".  Automatic win!");
                  theDealer.printHand();
                  return;
              }
              theDealer.hitMe();
              System.out.println("Dealer draws a " + theDealer.mostRecentCard().name() + ", and now has " + theDealer.valueOfHand() + " points.");
          }
  
          // check to see if dealer busts
          if (theDealer.valueOfHand() &gt; WINNING_LIMIT) {
              System.out.println("Dealer busts. Player 2 wins!");
              return;
          }
  
          System.out.println("Dealer stands with a hand of value " + theDealer.valueOfHand() + ":");
          theDealer.printHand();
  
          // player 2's starting hand
          System.out.println("Now, it's player 2's turn.");
          BlackjackHand player2 = new BlackjackHand(deck);
          System.out.println("Player 2 begins with a hand of value " + player2.valueOfHand() + ":");
          player2.printHand();
  
          // player 2 hits until he stands.  Beat the dealer's hand, or bust.
          while (player2.valueOfHand() &lt; theDealer.valueOfHand()) {
              if (player2.sizeOfHand() &gt;= BlackjackHand.MAX_HAND_SIZE) { // 5 cards under 21: auto-win
                  System.out.println("Player 2 has drawn a hand of 5 cards, of value " + player2.valueOfHand() + ".  Automatic win!");
                  player2.printHand();
                  return;
              }
              player2.hitMe();
              System.out.println("Player 2 draws a " + player2.mostRecentCard().name() + ", and now has " + player2.valueOfHand() + " points.");
          }
  
          // check to see if Player 2 busts
          if (player2.valueOfHand() &gt; WINNING_LIMIT) {
              System.out.println("Player 2 busts. Dealer wins!");
              return;
          }
  
          System.out.println("The hand is over.");
          System.out.println("Dealer's hand has value " + theDealer.valueOfHand() + ":");
          theDealer.printHand();
          System.out.println("Player 2's hand has value " + player2.valueOfHand() + ":");
          player2.printHand();
  
          // figure out who won
          if (theDealer.valueOfHand() &gt;= player2.valueOfHand()) {
              System.out.println("Dealer wins!");
          } else {
              System.out.println("Player 2 wins!");
          }
      }//main
  }//Blackjack
  </code></pre>
  
  <p>I know its daunting guys but I really need a little assistance. I dont want it done for me, I want to help understand it. </p>