My program uses a switch for the values of my cards
I need help making Jack, Queen, and King all equal to 10
and NOT 11, 12, 13 as in my program
Also, how do i make the player choose if they want Ace to equal to 1 or 11?
/* An object of class card represents one of the 52 cards in a standard deck of playing cards. Each card has a suit and a value. */ public class Card { public final static int SPADES = 0, // Codes for the 4 suits. HEARTS = 1, DIAMONDS = 2, CLUBS = 3; public final static int ACE = 1, // Codes for the non-numeric cards. JACK = 11, // Cards 2 through 10 have their QUEEN = 12, // numerical values for their codes. KING = 13; private final int suit; // The suit of this card, one of the constants // SPADES, HEARTS, DIAMONDS, CLUBS. private final int value; // The value of this card, from 1 to 11. public Card(int theValue, int theSuit) { // Construct a card with the specified value and suit. // Value must be between 1 and 13. Suit must be between // 0 and 3. If the parameters are outside these ranges, // the constructed card object will be invalid. value = theValue; suit = theSuit; } public int getSuit() { // Return the int that codes for this card's suit. return suit; } public int getValue() { // Return the int that codes for this card's value. return value; } public String getSuitAsString() { // Return a String representing the card's suit. // (If the card's suit is invalid, "??" is returned.) switch ( suit ) { case SPADES: return "Spades"; case HEARTS: return "Hearts"; case DIAMONDS: return "Diamonds"; case CLUBS: return "Clubs"; default: return "??"; } } public String getValueAsString() { // Return a String representing the card's value. // If the card's value is invalid, "??" is returned. switch ( value ) { case 1: return "Ace"; case 2: return "2"; case 3: return "3"; case 4: return "4"; case 5: return "5"; case 6: return "6"; case 7: return "7"; case 8: return "8"; case 9: return "9"; case 10: return "10"; case 11: return "Jack"; case 12: return "Queen"; case 13: return "King"; default: return "??"; } } public String toString() { // Return a String representation of this card, such as // "10 of Hearts" or "Queen of Spades". return getValueAsString() + " of " + getSuitAsString(); } } // end class Card
/* An object of type Deck represents an ordinary deck of 52 playing cards. The deck can be shuffled, and cards can be dealt from the deck. */ public class Deck { private Card[] deck; // 52 Cards are created in array that will be used for the deck private int cardsUsed; // How many cards have been dealt from the deck. public Deck() { // Create an unshuffled deck of cards. deck = new Card[52]; int cardCt = 0; // How many cards have been created so far. for ( int suit = 0; suit <= 3; suit++ ) { for ( int value = 1; value <= 13; value++ ) { deck[cardCt] = new Card(value,suit); cardCt++; } } cardsUsed = 0; } public void shuffle() { // Put all the used cards back into the deck, and shuffle it into // a random order. for ( int i = 51; i > 0; i-- ) { int rand = (int)(Math.random()*(i+1)); Card temp = deck[i]; deck[i] = deck[rand]; deck[rand] = temp; } cardsUsed = 0; } public int cardsLeft() { // As cards are dealt from the deck, the number of cards left // decreases. This function returns the number of cards that // are still left in the deck. return 52 - cardsUsed; } public Card dealCard() { // Deals one card from the deck and returns it. if (cardsUsed == 52) shuffle(); cardsUsed++; return deck[cardsUsed - 1]; } } // end class Deck
import java.util.Scanner; public class G21 { static Deck deck; static int playerHand; static int compHand; static Scanner scanner; public static void main(String[] args) { scanner = new Scanner(System.in); deck = new Deck(); deck.shuffle(); boolean deal = true; do { playerHand = 0; compHand = 0; start(); if(playersTurn()) dealersTurn(); checkScores(); System.out.println("Play again? y/n"); if(scanner.nextLine().charAt(0) != 'y') deal = false; } while(deal); } private static void start() { for(int j = 0; j < 2; j++) { Card card = deck.dealCard(); String s = (j == 0) ? "1st" : "2nd"; System.out.println("Your " + s + " card: " + card); playerHand += card.getValue(); // check for blackjack } for(int j = 0; j < 2; j++) { Card card = deck.dealCard(); String s = (j == 0) ? "1st" : "2nd"; System.out.println("Dealer's " + s + " card: " + card); compHand += card.getValue(); // check for blackjack } } private static boolean playersTurn() { boolean takeHit = true; while(takeHit) { System.out.println("Do you want a hit? y/n"); if(scanner.nextLine().charAt(0) == 'y') { Card card = deck.dealCard(); System.out.println("Your next card: " + card); playerHand += card.getValue(); if(playerHand > 21) takeHit = false; } else { takeHit = false; } } return playerHand <= 21; } private static void dealersTurn() { while(compHand < 16) { Card card = deck.dealCard(); System.out.println("Dealer's next card: " + card); compHand += card.getValue(); } } private static void checkScores() { if(playerHand > 21) System.out.println("You lose with " + playerHand); else if(compHand > 21) System.out.println("Dealer loses with " + compHand); else if(compHand == 21) System.out.println("Dealer wins with " + compHand); else if (playerHand == 21) System.out.println("You win with " + playerHand); else { String result; if(playerHand > compHand) result = "You win: " + playerHand + " to " + compHand; else result = "Dealer wins with " + compHand + " to " + playerHand; System.out.println(result); } } }