Kartenstapel in Java mischen

Rashmi Patidar 12 Oktober 2023
  1. Mischen der ArrayList mit der traditionellen Schleife in Java
  2. Mischen der ArrayList mit der Collections-Funktion shuffle in Java
Kartenstapel in Java mischen

Das Wort Mischen bedeutet wörtlich, die Elemente, Objekte oder Karten in zufälliger oder undefinierter Reihenfolge anzuordnen. Die Objektliste, die keinem definierten Muster folgt, wird als gemischt betrachtet.

In ähnlicher Weise ermöglichen es in Java verschiedene Methoden einem Benutzer, Elemente zu mischen. Unten ist der Codeblock, um diesen Vorgang zu demonstrieren.

Mischen der ArrayList mit der traditionellen Schleife in 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);
  }
}

Im obigen Code wird eine ArrayList instanziiert. Die erstellte Instanz hilft beim Hinzufügen von Elementen zur ArrayList. Die Liste wird in sequentieller Reihenfolge von 0 bis 51 Werten gefüllt. Die Deckgröße ist eine statische Variable, die auf Klassenebene deklariert wird.

Die for-Schleife prüft die Bedingung, wobei der Anfangswert mit der statischen Deckgrößenvariable geprüft wird. Um nun die Ausgangsliste zu mischen, wird eine weitere leere ArrayList erstellt. Wir werden eine while-Schleife mit einer Bedingung anwenden, bei der die Deckgröße größer als der Wert Null sein muss.

Die Idee, diese Bedingung beizubehalten, besteht darin, dass das Element aus einem Deck entfernt und in eine andere gemischte Liste eingefügt wird. Daher nimmt die ursprüngliche Größe weiter ab und wird schließlich null.

Innerhalb der Schleife verwenden wir die Funktion random, um zuerst den Index zu finden. Die statische Methode ist in der Klasse Math vorhanden und wird direkt über den Klassennamen aufgerufen. Die Utility-Funktion generiert eine Zufallszahl zwischen 0.0 und 1.0. Die Methode gibt immer einen doppelten Wert zurück.

Zur Berechnung des index-Wertes wird die gebildete Zufallszahl mit der aktuellen Grösse der Array-Liste multipliziert. Daher wird jedes Mal ein zufälliger Index generiert.

Nun wird der gebildete Index verwendet, um das Element am Index im ursprünglichen Deck zu entfernen. Die Methode remove stammt aus der Klasse ArrayList und entfernt den jeweiligen Wert am Index. Es nimmt den Index oder die Position in der Liste an, die entfernt werden soll.

Die Funktion gibt auch das Element am Index in der Liste zurück. Das zu entfernende Objekt wird der neuen gemischten Liste hinzugefügt. Die Schleife wird fortgesetzt, wobei nun ein Element die Größe des ursprünglichen Decks verringert. Daher wird bei der nächsten Iteration ein neuer Index generiert. Und jedes Mal wird ein Wert entfernt und in der gemischten Liste angehängt.

Unten ist die Ausgabe des angegebenen Codeblocks.

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]

Mischen der ArrayList mit der Collections-Funktion shuffle in Java

Unten ist der Codeblock, der das Mischen mit der Methode shuffle demonstriert.

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);
  }
}

Im Codeblock ist die Prozedur der ArrayList-Instanziierung gleich. Das Hinzufügen von Elementen in der Liste erfolgt ähnlich wie im ersten Code. Wir drucken die geordnete Liste mit der Methode println an die Konsole.

Nun wird die Funktion shuffle von Collections aufgerufen. Diese Methode führt eine Permutation durch und berechnet zufällig die Werte in der gegebenen Liste. Diese Funktion verschiebt das zufällig ausgewählte Element wieder in die Liste. Es löst die UnsupportedOperationException aus, wenn die bereitgestellte Liste die Set-Operation nicht unterstützt. Die zufällig gebildete Liste wird in der Konsole zusammen mit den Originallisten gedruckt.

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

Verwandter Artikel - Java ArrayList

Verwandter Artikel - Java Loop

Verwandter Artikel - Java Array