Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

1 // Fig. 7.11: DeckOfCardsTest.java 2 // Card shuffling and dealing. 3 4 public

ID: 3822213 • Letter: 1

Question

1 // Fig. 7.11: DeckOfCardsTest.java 2 // Card shuffling and dealing. 3 4 public class DeckOfCardsTest 5 { 6 // execute application 7 public static void main(String[] args) 8 { 9 DeckOfCards myDeckOfCards = new DeckOfCards(); 10 myDeckOfCards.shuffle(); // place Cards in random order 11 12 // print all 52 Cards in the order in which they are dealt 13 for (int i = 1; i <= 52; i++) 14 { 15 // deal and display a Card 16 System.out.printf("%-19s", myDeckOfCards.dealCard()); 17 18 if (i % 4 == 0) // output a newline after every fourth card 19 System.out.println(); 20 } 21 } 22 } // end class DeckOfCardsTest

7.11

Modify the application of fig 7.11 to deal a five-card poker hand.

Java

Explanation / Answer

Answer

Card.java

public class Card

{

private String face; // face of card ("Ace", "Deuce", ...)

private String suit; // suit of card ("Hearts", "Diamonds", ...)

// two-argument constructor initializes card's face and suit

public Card( String cardFace, String cardSuit )

{

face = cardFace; // initialize face of card

suit = cardSuit; // initialize suit of card

} // end two-argument Card constructor

// return String representation of Card

public String toString()

{

return face + " of " + suit;

} // end method toString

} // end class Card

DeckOfCards.java

// DeckOfCards class represents a deck of playing cards.

import java.util.Random;

public class DeckOfCards

{

private Card deck[]; // array of Card objects

private int currentCard; // index of next Card to be dealt

private final int NUMBER_OF_CARDS = 52; // constant number of Cards

private Random randomNumbers; // random number generator

// constructor fills deck of Cards

public DeckOfCards()

{

String faces[] = { "Ace", "Deuce", "Three", "Four", "Five", "Six",

"Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };

String suits[] = { "Hearts", "Diamonds", "Clubs", "Spades" };

deck = new Card[ NUMBER_OF_CARDS ]; // create array of Card objects

currentCard = 0; // set currentCard so first Card dealt is deck[ 0 ]

randomNumbers = new Random(); // create random number generator

// populate deck with Card objects

for ( int count = 0; count < deck.length; count++ )

deck[ count ] =

new Card( faces[ count % 13 ], suits[ count / 13 ] );

} // end DeckOfCards constructor

// shuffle deck of Cards with one-pass algorithm

public void shuffle()

{

// after shuffling, dealing should start at deck[ 0 ] again

currentCard = 0; // reinitialize currentCard

// for each Card, pick another random Card and swap them

for ( int first = 0; first < deck.length; first++ )

{

// select a random number between 0 and 51

int second = randomNumbers.nextInt( NUMBER_OF_CARDS );

// swap current Card with randomly selected Card

Card temp = deck[ first ];

deck[ first ] = deck[ second ];

deck[ second ] = temp;

} // end for

} // end method shuffle

// deal one Card

public Card dealCard()

{

// determine whether Cards remain to be dealt

if ( currentCard < deck.length )

return deck[ currentCard++ ]; // return current Card in array

else

return null; // return null to indicate that all Cards were dealt

} // end method dealCard

} // end class DeckOfCards

DeckOfCardsTest.java

public class DeckOfCardsTest

{

// execute app

public static void main( String args[] )

{

DeckOfCards myDeckOfCards = new DeckOfCards();

myDeckOfCards.shuffle(); // place Cards in random order

// print all 52 Cards in the order in which they are dealt

for ( int i = 0; i < 13; i++ )

{

// deal and print 4 Cards

System.out.printf( "%-20s%-20s%-20s%-20s ",

myDeckOfCards.dealCard(), myDeckOfCards.dealCard(),

myDeckOfCards.dealCard(), myDeckOfCards.dealCard() );

} // end for

} // end main

} // end class DeckOfCardsTest