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
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.