Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.66 KB | None | 0 0
  1.  /**
  2.      * This method implements the riffling algorthim to which the cards are supposed to get shuffled.
  3.      * It needs two lists to work:
  4.      * @param left is a list containing a half of the deck
  5.      * @param right is a list containing the other half.
  6.      */
  7.    public static List<Card> riffleMerge (List<Card> left, List<Card> right) {
  8.  
  9.         final List<Card> riffledDeck = new ArrayList<>(); // A list containing the shuffled cards
  10.         final Random random = new Random();
  11.         int leftSize;
  12.         int rightSize;
  13.         double probability;        
  14.         do {
  15.             leftSize  = left.size();  // brauchen wir so oft, also nur einmal auslesen
  16.             rightSize = right.size();            
  17.             if (leftSize == 0) {  // eine Liste ist leer: die andere komplett rückwärts anhängen
  18.                 Collections.reverse(right); // Reihenfolge umdrehen
  19.                 riffledDeck.addAll(right);
  20.                 right.clear(); // nur damit wie oben die Inputs am Ende leer sind; kann auch entfallen
  21.             } else if (rightSize == 0) { // eine Liste ist leer: die andere komplett rückwärts anhängen
  22.                 Collections.reverse(left); // Reihenfolge umdrehen
  23.                 riffledDeck.addAll(left);
  24.                 left.clear(); // nur damit wie oben die Inputs am Ende leer sind; kann auch entfallen
  25.             } else {
  26.                 probability = (double)leftSize / (double)(leftSize+rightSize);
  27.                 riffledDeck.add(probability < random.nextDouble() ? left.remove(leftSize-1) : right.remove(rightSize-1));
  28.             }
  29.         } while(leftSize > 0 && rightSize > 0);
  30.  
  31.         return riffledDeck;
  32.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement