Baralho de cartas embaralhado em Java

Rashmi Patidar 12 outubro 2023
  1. Embaralhe o ArrayList usando o loop tradicional em Java
  2. Embaralhe a ArrayList usando a função shuffle das coleções em Java
Baralho de cartas embaralhado em Java

A palavra embaralhar significa literalmente organizar os elementos, objetos ou cartas em ordem aleatória ou indefinida. A lista de objetos que não segue um padrão definido é considerada embaralhada.

Da mesma forma, em Java, vários métodos permitem que um usuário embaralhe elementos. Abaixo está o bloco de código para demonstrar esse processo.

Embaralhe o ArrayList usando o loop tradicional em 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);
  }
}

No código acima, uma ArrayList é instanciada. A instância criada ajuda a adicionar elementos ao ArrayList. A lista é preenchida em ordem sequencial de valores 0 a 51. O tamanho do deck é uma variável estática declarada no nível da classe.

O loop for verifica a condição, em que o valor inicial é verificado com a variável de tamanho do deck estático. Agora, para embaralhar a lista inicial, outra ArrayList vazia é criada. Aplicaremos um loop while com uma condição em que o tamanho do deck deve ser maior que o valor zero.

A ideia de manter essa condição é porque o elemento de um baralho é removido e colocado em outra lista embaralhada. Conseqüentemente, o tamanho original continua diminuindo e, finalmente, torna-se zero.

Dentro do loop, usamos a função random para encontrar o índice primeiro. O método estático está presente na classe Math e é chamado diretamente pelo nome da classe. A função de utilidade gera um número aleatório que varia entre 0.0 e 1.0. O método sempre retorna um valor duplo.

Para calcular o valor index, o número aleatório formado é multiplicado pelo tamanho atual da lista do array. Conseqüentemente, gerando um índice aleatório a cada vez.

Agora, o índice formado é usado para remover o elemento do índice no baralho original. O método remove é da classe ArrayList e remove o valor particular no índice. Leva o índice ou a posição na lista para ser removido.

A função também retorna o elemento no índice da lista. O objeto a ser removido é adicionado à nova lista embaralhada. O loop continua, onde um elemento agora reduz o tamanho do deck original. Portanto, quando itera da próxima vez, um novo índice será gerado. E a cada vez, um valor é removido e anexado na lista embaralhada.

Abaixo está a saída do bloco de código fornecido.

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]

Embaralhe a ArrayList usando a função shuffle das coleções em Java

Abaixo está o bloco de código que demonstra o embaralhamento usando o 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);
  }
}

No bloco de código, o procedimento de instanciação ArrayList é o mesmo. A adição de elementos na lista é feita de forma semelhante à do primeiro código. Imprimimos a lista ordenada no console usando o método println.

Agora, a função shuffle de Collections é chamada. Este método realiza a permutação e calcula aleatoriamente os valores na lista fornecida. Esta função coloca o elemento selecionado aleatoriamente de volta na lista. Ele lança o UnsupportedOperationException quando a lista fornecida não suporta a operação de definição. A lista formada aleatoriamente é impressa no console junto com as listas originais.

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

Artigo relacionado - Java ArrayList

Artigo relacionado - Java Loop

Artigo relacionado - Java Array