Monday, March 14, 2011

better shuffle



import java.util.*;
public class Deck {

public class Card implements Comparable<Card> {
private int value;
Card(int v) {
value = v;
}
public int getValue() {return value;}
public String toString(){
return ""+value;
}
public int compareTo(Card other) {
return value - other.value;
}
}

private final int num=52;
Vector<Card> deck = new Vector<Card>();

public Vector<Card> shuffle(Vector<Card> deck){
if (deck == null || deck.size() < num) {
System.out.println("\ninitialize deck");
deck = new Vector<Card>(); // new deck
for (int i=0; i<num; i++) {
Card c = new Card(i);
deck.add(c);
}
}
int [] arr = new int[num];
int j=0;
for (Card card : deck) {
arr[j++] = card.getValue();
}
shuffleArr(arr);
deck = new Vector<Card>(); // new deck
for (int i=0; i<num; i++) {
Card c = new Card(arr[i]);
deck.add(c);
}
return deck;
}
Random rand = new Random();
public void shuffleArr(int [] arr){
for (int i=0; i<arr.length-1; i++) {
int rnd = i+ rand.nextInt(arr.length-i);
//swap arr[i] and a[rnd]
int tmp = arr[i];
arr[i] = arr[rnd];
arr[rnd] = tmp;
}
}

public static void main(String[] args) {
Deck deckInst = new Deck();
Vector<Card> deck = null;
for (int i=0; i<6; i++) {
deck = deckInst.shuffle(deck);
System.out.println("\nout:");
for (Card card : deck) {
System.out.print(","+card.toString());
}
}
System.out.println("\nsorted:");
Collections.<Card>sort(deck);
for (Card card : deck) {
System.out.print(","+card.toString());
}
}
}

No comments:

Post a Comment