Spielkarten Enumeration in KartenDeck verwalten

Tiyen

Mitglied
Hi all :)

Habe folgendes Problem:
Mein Teampartner und ich veruschen das Spiel 17 & 4 zu programmieren.

Laut Aufgabenstellung sollen die Karten als Enumeration realisiert werden:
Java:
	public enum Karten {

		HERZZWEI(2), HERZDREI(3), HERZVIER(4), HERZFÜNF(5), HERZSECHS(6), HERZSIEBEN(
				7), HERZACHT(8), HERZNEUN(9), HERZZEHN(10), HERZBUBE(10), HERZDAME(
				10), HERZKÖNIG(10), HERZASS(11),

		KAROZWEI(2), KARODREI(3), KAROVIER(4), KAROFÜNF(5), KAROSECHS(6), KAROSIEBEN(
				7), KAROACHT(8), KARONEUN(9), KAROZEHN(10), KAROBUBE(10), KARODAME(
				10), KAROKÖNIG(10), KAROASS(11),

		PIKZWEI(2), PIKDREI(3), PIKVIER(4), PIKFÜNF(5), PIKSECHS(6), PIKSIEBEN(7), PIKACHT(
				8), PIKNEUN(9), PIKZEHN(10), PIKBUBE(10), PIKDAME(10), PIKKÖNIG(10), PIKASS(
				11),

		KREUZZWEI(2), KREUZDREI(3), KREUZVIER(4), KREUZFÜNF(5), KREUZSECHS(6), KREUZSIEBEN(
				7), KREUZACHT(8), KREUZNEUN(9), KREUZZEHN(10), KREUZBUBE(10), KREUZDAME(
				10), KREUZKÖNIG(10), KREUZASS(11);

		private int wert;

		private Karten(int wert) {
			this.wert = wert;
		}

		public int getWert() {
			return this.wert;
		}
	}

Diese ganzen Karten sollen zusätzlich noch in einem Karten Deck verwaltet werden. (Quasi jeder Tisch hat ein Deck von Karten:D). Ausserdem sollen die Karten in einem Stack gespeichert werdenm, da man nach Aufgabenstellung nur von oben abheben darf und die Karten auch nur wieder oben drauf legen soll

Java:
package com.hsma.muemey.tpeib06.Casino;

import java.util.Stack;

public class KartenDeck<Karten> {
	
	private Stack<Karten> deck = new Stack<Karten>();
	
	public KartenDeck() {

	}

Hier liegt auch gleich das Problem und zwar komme ich einfach nicht drauf wie ich die Karten aus der Enum in der Klasse KartenDeck dem Stack zuweisen kann. Habe schon versucht in der Enum erstmal die Karten einer Liste zuzuordnen, damit ich diese dann irgendwie übergeben kann, hat aber nicht wirklich funktioniert. Würde mich über Tips und Hilfestellung sehr freuen :)

MfG Tiyen
 

stg

Top Contributor
WAS funktioniert nicht?
Du kannst natürlich einfach jede Karte einzeln per "push" dem Stack hinzufügen.
Wenn du die Karten bereits als Liste vorliegen hast, dann kannst du natürlich auch die .addAll-Methode von der Klasse Vector benutzen. Was ist denn das Problem?
 

Gucky

Top Contributor
Korrigiert mich, wenn ich falsch liege aber kann man nicht nur Objekte einem Stack hinzufügen? Und eine Enumeration ist doch kein Objekt. Oder?
 

stg

Top Contributor
Die Enumeration selbst natürlich erst mal nicht, aber die einzelnen Karten. Eine Enumeration ist doch auch nur eine Arte "bestimmte Klasse", die einzelnen Werte des Enums spezielle Objekte. Folgendes Beispiel funktioniert jedenfalls problemlos:

Java:
;
import java.util.Stack;

public class KartenTest {    
    public static void main(String [] args) {
        Stack<Karte> kartenstapel = new Stack<Karte>();
        kartenstapel.push(Karte.ASS);        
        System.out.println(kartenstapel.pop());
    }
}

Java:
public enum Karte {
    KOENIG(1),
    ASS(2);    
    private final int value;    
    private Karte(int i) {
        this.value = i;
    }
}

Liefert erwartungsgemäß die Ausgabe:
Code:
ASS
 

Tiyen

Mitglied
Danke erstmal für eure schnellen Antworten :toll:
Das hat mir schon weitergeholfen, ich frage mich nur noch, wie ich die ganzen Karten auf den Stack schieben kann, ohne 53 mal Karte.push() aufzurufen ? Geht das mit einer if-Schleife(kleiner Scherz, ich meine mit einer for-Schleife natürlich :D) ?

Java:
import java.util.Stack;

public class KartenDeck<Karten> {
	
	private Stack<Karten> kartenstapel = new Stack<Karten>();
	
	public KartenDeck() {
		for(int i=0; i<53; i++) {
			kartenstapel.push(Karten); // Kann man hier über die Enumeration iterieren?
		}
	}
}

MfG Tiyen
 

stg

Top Contributor
Java:
Karten.values()
liefert dir ein ARRAY mit allen Karten. Über dieses kannst du natürlich iterieren.
 

Tiyen

Mitglied
Ok in der Enum Klasse hat das mit values() funktioniert, nur wenn ich jetzt in meiner Klasse KartenDeck über
Java:
Karten.values()
das Array bekommen möchte, geht das nicht.

Java:
    import java.util.Stack;
     
    public class KartenDeck<Karten> {
       
        private Stack<Karten> kartenstapel = new Stack<Karten>();
       
        public KartenDeck() {
            for(int i=0; i<53; i++) {
                kartenstapel.push(Karten.values()); // Hier ist das Array nötig um die Karten auf den Stack
                                                                // zu pushen
                                                                // funktioniert nur leider nicht wie geplant
            }
        }
    }
 
Zuletzt bearbeitet:

stg

Top Contributor
Schau dir doch mal die Signatur der dir zur Verfügung stehenden Methoden an, statt einfach nur zu raten und irgendwas hinzuschreiben, in der Hoffnung, dass es vielleicht so ungefähr das macht, was du möchtest.

Mit der push-Methode vom Stack kannst du genau EIN Element auf den Stack legen. Karten.values() liefert dir aber ein ARRAY von ALLEN Karten! Natürlich kann das so nicht funktionieren... Also iterierst du entweder über dein Karten-Array und legst dabei jede Karten EINZELN auf den Stack, oder du machst dir vorher aus dem Array eine Collection bzw List und legst diese mit der addAll-Methode von Vetor (Stack erweitert Vector!) als ganzes auf den Stack.
 

Ähnliche Java Themen

Neue Themen


Oben