Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * This method implements the riffling algorthim to which the cards are supposed to get shuffled.
- * It needs two lists to work:
- * @param left is a list containing a half of the deck
- * @param right is a list containing the other half.
- */
- public static List<Card> riffleMerge (List<Card> left, List<Card> right) {
- final List<Card> riffledDeck = new ArrayList<>(); // A list containing the shuffled cards
- final Random random = new Random();
- int leftSize;
- int rightSize;
- double probability;
- do {
- leftSize = left.size(); // brauchen wir so oft, also nur einmal auslesen
- rightSize = right.size();
- if (leftSize == 0) { // eine Liste ist leer: die andere komplett rückwärts anhängen
- Collections.reverse(right); // Reihenfolge umdrehen
- riffledDeck.addAll(right);
- right.clear(); // nur damit wie oben die Inputs am Ende leer sind; kann auch entfallen
- } else if (rightSize == 0) { // eine Liste ist leer: die andere komplett rückwärts anhängen
- Collections.reverse(left); // Reihenfolge umdrehen
- riffledDeck.addAll(left);
- left.clear(); // nur damit wie oben die Inputs am Ende leer sind; kann auch entfallen
- } else {
- probability = (double)leftSize / (double)(leftSize+rightSize);
- riffledDeck.add(probability < random.nextDouble() ? left.remove(leftSize-1) : right.remove(rightSize-1));
- }
- } while(leftSize > 0 && rightSize > 0);
- return riffledDeck;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement