Baraja baraja de cartas en Java

Rashmi Patidar 12 octubre 2023
  1. Mezclar la ArrayList utilizando el bucle tradicional en Java
  2. Mezcla aleatoriamente la función ArrayList usando la función de colecciones shuffle en Java
Baraja baraja de cartas en Java

La palabra barajar literalmente significa organizar los elementos, objetos o cartas en un orden aleatorio o indefinido. La lista de objetos que no sigue un patrón definido se considera barajada.

De manera similar, en Java, varios métodos permiten al usuario mezclar elementos. A continuación se muestra el bloque de código para demostrar este proceso.

Mezclar la ArrayList utilizando el bucle tradicional en Java

import java.util.ArrayList;

public class Main {
  private static final int SIZE_OF_DECK = 52;

  public static void main(String[] args) {
    ArrayList<Integer> cardsDeck = new ArrayList<>();
    for (int i = 0; i < SIZE_OF_DECK; ++i) {
      cardsDeck.add(i);
    }
    System.out.println("Deck Of Cards:" + cardsDeck);
    ArrayList<Integer> shuffledDeck = new ArrayList<>();
    while (cardsDeck.size() > 0) {
      int index = (int) (Math.random() * cardsDeck.size());
      int removedCard = cardsDeck.remove(index);
      shuffledDeck.add(removedCard);
    }
    System.out.println("Shuffled Cards" + shuffledDeck);
  }
}

En el código anterior, se crea una instancia de una ArrayList. La instancia creada ayuda a agregar elementos a la ArrayList. La lista se completa en orden secuencial de valores 0 a 51. El tamaño del mazo es una variable estática declarada a nivel de clase.

El bucle for comprueba la condición, en la que el valor inicial se comprueba con la variable de tamaño de plataforma estática. Ahora, para mezclar la lista inicial, se crea otra ArrayList vacía. Aplicaremos un bucle while con una condición en la que el tamaño de la plataforma debe ser mayor que el valor cero.

La idea de mantener esta condición es porque el elemento de un mazo se elimina y se coloca en otra lista barajada. Por lo tanto, el tamaño original sigue disminuyendo y finalmente se vuelve cero.

Dentro del bucle, usamos la función random para encontrar el índice primero. El método estático está presente en la clase Math y es llamado directamente por el nombre de la clase. La función de utilidad genera un número aleatorio que varía entre 0.0 y 1.0. El método siempre devuelve un valor double.

Para calcular el valor del índice, el número aleatorio formado se multiplica por el tamaño actual de la lista de matrices. Por lo tanto, generar un índice aleatorio cada vez.

Ahora, el índice formado se utiliza para eliminar el elemento en el índice en el mazo original. El método remove es de la clase ArrayList y elimina el valor particular en el índice. Toma el índice o la posición en la lista para ser eliminado.

La función también devuelve el elemento en el índice de la lista. El objeto que se eliminará se agregará a la nueva lista aleatoria. El bucle continúa, donde un elemento ahora reduce el tamaño del mazo original. Por lo tanto, cuando se repita la próxima vez, se generará un nuevo índice. Y cada vez, se elimina un valor y se agrega a la lista aleatoria.

A continuación se muestra la salida del bloque de código dado.

Deck Of Cards:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
Shuffled Cards[51, 34, 28, 47, 14, 49, 42, 50, 26, 0, 44, 43, 2, 36, 30, 8, 46, 11, 21, 23, 7, 4, 33, 41, 32, 1, 20, 3, 10, 18, 6, 40, 29, 24, 31, 13, 45, 39, 22, 15, 27, 48, 9, 5, 25, 12, 38, 35, 37, 17, 16, 19]

Mezcla aleatoriamente la función ArrayList usando la función de colecciones shuffle en Java

A continuación se muestra el bloque de código que demuestra el barajado utilizando el método shuffle.

import java.util.ArrayList;
import java.util.Collections;

public class Main {
  public static void main(String[] args) {
    int deckSize = 52;
    ArrayList<Integer> list = new ArrayList<>();
    for (int i = 0; i < deckSize; ++i) {
      list.add(i);
    }
    System.out.println("Sequential List: " + list);
    Collections.shuffle(list);
    System.out.println("Shuffled List: " + list);
  }
}

En el bloque de código, el procedimiento de instanciación de ArrayList es el mismo. La adición de elementos en la lista se realiza de manera similar a la del primer código. Imprimimos la lista ordenada en la consola usando el método println.

Ahora, se llama a la función shuffle de Collections. Este método realiza permutación y calcula aleatoriamente los valores en la lista dada. Esta función vuelca el elemento seleccionado aleatoriamente de nuevo a la lista. Lanza la UnsupportedOperationException cuando la lista proporcionada no admite la operación de configuración. La lista formada aleatoriamente se imprime en la consola junto con las listas originales.

Sequential List[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
Shuffled List[46, 5, 4, 0, 19, 11, 13, 21, 1, 38, 36, 29, 31, 35, 48, 22, 49, 6, 14, 51, 3, 47, 16, 12, 42, 27, 50, 40, 26, 30, 33, 9, 43, 39, 2, 10, 28, 44, 8, 24, 41, 32, 25, 45, 34, 7, 23, 15, 18, 20, 37, 17]
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Artículo relacionado - Java ArrayList

Artículo relacionado - Java Loop

Artículo relacionado - Java Array