# Spielkarten Enumeration in KartenDeck verwalten



## Tiyen (2. Dez 2013)

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:

```
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). 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


```
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 (2. Dez 2013)

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 (2. Dez 2013)

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 (2. Dez 2013)

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:


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


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

Liefert erwartungsgemäß die Ausgabe:

```
ASS
```


----------



## Tiyen (2. Dez 2013)

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 ) ?


```
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 (2. Dez 2013)

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


----------



## Tiyen (4. Dez 2013)

Ok in der Enum Klasse hat das mit values() funktioniert, nur wenn ich jetzt in meiner Klasse KartenDeck über 
	
	
	
	





```
Karten.values()
```
 das Array bekommen möchte, geht das nicht.


```
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
            }
        }
    }
```


----------



## stg (4. Dez 2013)

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.


----------

