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?
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.
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!?
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.
Hmm also 7 als Bezeichner kannst du jedenfalls nicht verwenden. Wenn du davon auf 7 schliessen sollst, dann geht das nur mit Fallunterscheidungen.
Code:
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));
}
}
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: 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.
Code:
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:
Code:
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.
Ich kann jetzt mir speziell die Werte (Bildkarten/Wertkarte) ausgeben lassen und gleichzeitig abfragen, ob es sich um eine Bildkarte/Wertkarte handelt.