# enum und Integer-Werte



## Eisscholle (2. Dez 2006)

Hi,

kurze Frage zu enum.

Ich will ein enum wie folgt:


```
enum NumberCards
{
	7, 8, 9, 10, Bube, Dame, Ass
}
```

Er macht mir Probleme beim compilieren wegen der Zahlen 7 bis 10. Wenn ich die weg lasse, geht alles. Was muss ich ändern, damit ich meinen Code übersetzen kann?

Danke,
VG


----------



## SlaterB (2. Dez 2006)

eine Enum muss wie eine normale Variable/ Konstante benannt sein,
7 ist 7 und kein Variablennamen,
'sieben' ginge


----------



## moormaster (2. Dez 2006)

7,8,9,10 sind bereits literale Konstanten und können nicht neu belegt werden... also denk Dir andere Namen dafür aus...

Sieben,Acht,Neun,Zehn z.B.


----------



## byte (2. Dez 2006)

Im übrigen schreibt man sie (da Konstanten) in Großbuchstaben. Du kannst ja die toString() jeweils überschreiben und somit eine beliebige Schreibweise für die Ausgabe wählen.


----------



## Eisscholle (4. Dez 2006)

Hi, danke für die schnellen Antworten. Leider will mein Prof., dass wir die Aufgaben mit 7,8,9 etc. lösen und auch kein if etc. nutzen. Von daher bin ich an die Zahlen förmlich getackert. Würde es auch lieber anders lösen. Hatte jetzt noch probiert alles einzeln als Konstanten zu definieren aber das ging auch nicht. Kann mir bitte jmd. zumindest für eine Zahl einmal ein Stück Code geben, wie ich beim Aufruf von NumberCards.SIEBEN die Zahl 7 erreiche!?

Vielen Dank.


----------



## moormaster (4. Dez 2006)

Mit switch?

Ich weiss ja nicht, was du machen willst/sollst.


----------



## Eisscholle (4. Dez 2006)

Naja, wir sollen ein enum schreiben für die Werte von Spielkarten. Also 7,8,9,10,Bube,Dame,Koenig,Ass. Will ich dann eine Spielkarte instanziieren, sage ich eben NumberCard.SIEBEN. Das Objekt soll dann nicht sieben sondern 7 bekommen. Also muss ich irgendwie die Zahl 7 in das enum bekommen. Das stellt mich aber vor ein rießen Problem.


----------



## moormaster (4. Dez 2006)

Hmm also 7 als Bezeichner kannst du jedenfalls nicht verwenden. Wenn du davon auf 7 schliessen sollst, dann geht das nur mit Fallunterscheidungen.


```
public enum GameCard
{
 SIEBEN, ACHT, NEUN, ZEHN, BUBE, DAME, KOENIG, ASS;
}

public class Main
{
 public static String getGameCardDescription(GameCard gc)
 {
   switch (gc)
   {
     case SIEBEN: return "7";
     case ACHT: return "8";
     case NEUN: return "9";
     case ZEHN: return "10";
     case BUBE: return "Bube";
     case DAME: return "Dame";
     case KOENIG: return "König";
     case ASS: return "Ass";
   }

   return "";
 }

 public static int getGameCardValue(GameCard gc)
 {
   switch (gc)
   {
     case SIEBEN: return 7;
     case ACHT: return 8;
     case NEUN: return 9;
     case ZEHN: return 10;
     case BUBE: return 10;
     case DAME: return 10;
     case KOENIG: return 10;
     case ASS: return 11;
   }

   return 0;
 }

 public static void main(String[] args)
 {
   System.out.println(getGameCardDescription(GameCard.SIEBEN));
   System.out.println(getGameCardValue(GameCard.SIEBEN));
 }
}
```


----------



## Eisscholle (4. Dez 2006)

Vielen  Dank. So kann ich es ja locker versuchen. Danke.


----------



## moormaster (4. Dez 2006)

Mooment... hab noch was besseres gefunden... ist immer gut, wenn man mal nachliest, was man mit enums alles anstellen kann:


```
public enum Coin {
    PENNY(1), NICKEL(5), DIME(10), QUARTER(25);

    Coin(int value) { this.value = value; }

    private final int value;

    public int value() { return value; }
}
```
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9

Damit dürfte es gehen der SIEBEN die 7 zuzuordnen.


----------



## byte (4. Dez 2006)

Wollte ich grade vorschlagen. Man kann auch beliebige Methoden in Enums definieren, überschreiben, usw. Wie ich oben schon geschrieben hab, aber auf mich hört ja keiner. :?


----------



## moormaster (4. Dez 2006)

So ist es anschaulicher


----------



## Eisscholle (4. Dez 2006)

Hi,

also ich habe auch noch etwas gefunden.

Einmal http://www.resourcecode.de/view.php?id=2423 und als zweites http://www.javabuch.de/.

@moormaster: Habe dein Beispiel mal angeschaut. So ähnlich probiere ich auch gerade mit Überladen herum. Aber: Wie löse ich jetzt, dass ich bei NumberCard.BUBE auch Bube als Zeichenkette zurueck bekomme? Ich versuche es zwar mit überladen aber irgendwie komme ich nicht ganz zum Ziel.


```
enum NumberCard
{

        SIEBEN(7);
	//BUBE("Bube");
	
	private NumberCard(int v)
	{
		value = v;
	}
	
	private NumberCard(String n)
	{
		name = n;
	}
	
	
	int value;
	String name;
}
```

Wie ihr seht, habe ich BUBE("Bube") auskommentiert, weil es der Compiler nicht mitmacht: 

```
NumberCard.java:18: invalid method declaration; return type required
        BUBE("Bube");
        ^
NumberCard.java:18: illegal start of type
        BUBE("Bube");
             ^
NumberCard.java:18: <identifier> expected
        BUBE("Bube");
                    ^
3 errors
```

kann mir da noch jmd. auf die Sprünge helfen. Tüftel zwar weiter aber es häng noch.


----------



## Eisscholle (4. Dez 2006)

Also das Problem mit BUBE habew ich gelöst..... Das frisst der COmpiler jetzt.....


----------



## Eisscholle (4. Dez 2006)

Hi,

für alle Interessierten: Die Lösung.


```
enum NumberCard
{
	//Kartenwerte franzoesisches Blatt
	SIEBEN(7),ACHT(8),NEUN(9),ZEHN(10),BUBE("Bube"),DAME("Dame"),KOENIG("König"),ASS("Ass");
	
	
	private NumberCard(int v)
	{
		isNumberCard = true; //Bildkarte
		valueOf = String.valueOf(v);
	}
	
	private NumberCard(String v)
	{
		isNumberCard = false; //Wertkarte
		valueOf = v;
	}
	
	public boolean isNumberCard()
	{
		return isNumberCard;	
	}
	
	public String getValueOf()
	{
		return valueOf;	
	}
	
	private boolean isNumberCard = false;
	private String valueOf;
	
	public static void main(String... args)
	{
		NumberCard card1 = NumberCard.BUBE;
		System.out.println(card1.getValueOf());
		//Bube
		
		NumberCard card2 = NumberCard.NEUN;
		System.out.println(card2.getValueOf());	
		//9
	}
}
```

Ich kann jetzt mir speziell die Werte (Bildkarten/Wertkarte) ausgeben lassen und gleichzeitig abfragen, ob es sich um eine Bildkarte/Wertkarte handelt. 

Vielen Dank an alle Helfer!!!


----------

