View Single Post
  #2 (permalink)  
Old 12-06-2007, 10:15 AM
hardwired hardwired is online now
Senior Member
 
Join Date: Jul 2007
Posts: 1,266
hardwired is on a distinguished road
Code:
import java.util.*; public class CardDrawer { Card[] cards; Random seed = new Random(); List<Card> cardsDrawn = new ArrayList<Card>(); boolean drawOnce = false; CardDrawer(boolean drawOnce) { this(); this.drawOnce = drawOnce; } CardDrawer() { initCards(1, 14); } CardDrawer(int low, int high, boolean drawOnce) { this(low, high); this.drawOnce = drawOnce; } CardDrawer(int low, int high) { initCards(low, high); } public Card drawCard() { return getCard(); } public Card[] drawCard(int n) { Card[] draws = new Card[n]; for(int j = 0; j < n; j++) { draws[j] = getCard(); } return draws; } private Card getCard() { Card card; boolean drawAgain = true; do { card = cards[seed.nextInt(cards.length)]; drawAgain = drawOnce ? cardsDrawn.contains(card) : false; } while(drawAgain); if(drawOnce) cardsDrawn.add(card); return card; } private void initCards(int low, int high) { String[] faces = { "jack", "queen", "king", "ace" }; String[] suits = { "spades", "hearts", "clubs", "diamonds" }; int len = high - low + 1; cards = new Card[4*len]; int count = 0; for(int j = 0; j < len; j++) { for(int k = 0; k < suits.length; k++) { cards[count++] = new Card(low+j, suits[k]); } } } /** Test this class. */ public static void main(String[] args) { CardDrawer cd1 = new CardDrawer(); Card[] cards = cd1.drawCard(5); System.out.printf("cd1 cards = %s%n", Arrays.toString(cards)); CardDrawer cd2 = new CardDrawer(10, 14, true); cards = cd2.drawCard(5); System.out.printf("cd2 cards = %s%n", Arrays.toString(cards)); System.out.println("-------------"); CardDrawer cd3 = new CardDrawer(false); cards = cd3.drawCard(20); System.out.println("cd3 card duplicates:"); Card[] uniqueCards = getUniqueCards(cards); List<Card> cardList = new ArrayList<Card>(Arrays.asList(cards)); for(int j = 0; j < uniqueCards.length; j++) { int freq = Collections.frequency(cardList, uniqueCards[j]); if(freq > 1) System.out.println(uniqueCards[j] + " occurs " + freq + " times"); } System.out.println("-------------"); System.out.println("cardList = " + cardList); } private static Card[] getUniqueCards(Card[] cards) { List<Card> list = new ArrayList<Card>(); for(int j = 0; j < cards.length; j++) { if(!list.contains(cards[j])) list.add(cards[j]); } return list.toArray(new Card[list.size()]); } } class Card { int value; String suit; Card(int value, String suit) { this.value = value; this.suit = suit; } public String toString() { String[] vals = { "jack", "queen", "king", "ace" }; String s; if(value > 10) s = vals[value-11]; else s = String.valueOf(value); return s + " of " + suit; } }
Reply With Quote