Enum-werte als Methoden-Parameter übergeben

fischebr

Mitglied
Hallo liebe Java-Gemeinde,
ich programmiere ein Spiel, bei dem ich Spielfeldplatten kodieren muss. Die Kodierung wird an einen Server übertragen. Sie besteht aus zwei Werten, einem Buchstaben und einer Zahl, die konkateniert werden. Die Buchstaben stehen für bestimmte Plattengrößen, die Zahl sagt etwas über die spätere Belegung der Platten aus und ändert sich während des Spiels. Ich habe für beide Werte Enums erstellt:
Code:
public enum EFieldStatePlate {
   
// die verschiedenen Plates
   
    A10, B6, C6, D6, E6, F4, G4, H4, I4, J4, K3, L3, M3, N3, O2, P2, Q2, R2;
   
    @Override
    public String toString() {
        switch (this) {
        case B6:
            return "b";
        case C6:
            return "c";
        case D6:
            return "b";
        case E6:
            return "c";
        case F4:
            return "b";
        case G4:
            return "c";
        case H4:
            return "b";
        case I4:
            return "c";
        case J4:
            return "b";
        case K3:
            return "c";
        case L3:
            return "b";
        case M3:
            return "c";
        case N3:
            return "b";
        case O2:
            return "c";
        case P2:
            return "b";
        case Q2:
            return "c";
        case R2:
            return "b";
        default:
            return "a";
        }
    }

}
Code:
public enum EFieldStateMarble {
   
// rote Murmel, schwarze Murmel, keine Murmel
   
    RED, BLACK, EMPTY;
   
    @Override
    public String toString() {
        switch (this) {
        case RED:
            return "1";
        case BLACK:           
            return "2";
        default:
            return "0";
            }
       }
}

Die Platte B6 ohne Belegung wäre 2x3 Felder groß mit der Kodierung
b0b0b0
b0b0b0
die Platte F4 mit der Kodierung
f1f2
f0f2
wäre 2x2 Felder groß, mit einer roten Murmel und zwei schwarzen Murmeln belegt und hätte noch ein freies Feld.
Zum Erstellen dieser Platten habe ich folgende Klasse (noch nicht ganz fertig) erstellt:
Code:
public class Plate extends JPanel {

   // Eigenschaften
   public String plate[][];

   // Konstruktor
   public Plate(int r, int c,) {
       plate = new String[r][c];
       for (r = 0; r < plate.length; r++) { // waagerecht
           for (c = 0; c < plate[r].length; c++) { // senkrecht
               plate[r][c] = EFieldStatePlate.B6.toString()
                        + EFieldStateMarble.EMPTY.toString(); // Codierung Feld
           }

       }
   }

   // Methoden
   public void showPlate() { // Konsolenausgabe Spielfeldplatte
       for (int r = 0; r < plate.length; r++) {
           for (int c = 0; c < plate[r].length; c++) {
               System.out.print(plate[r][c]);
           }
           System.out.println();
       }
   }
@Override
   protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       Graphics2D g2d = (Graphics2D) g;
       g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

       drawPlateField(g2d, 2, 3);

   }

   private void drawPlateField(Graphics2D g2d, int x, int y) {
       int posX = x;
       int posY = y;
       g2d.setColor(Color.BLACK);
       g2d.drawRect(posX, posY, 60, 60);
       g2d.setColor(new Color(242, 203, 130));
       g2d.fillRect(posX + 1, posY + 1, 59, 59);
       g2d.setColor(Color.BLACK);
       g2d.drawOval(x + 15, y + 15, 30, 30);
       g2d.setColor(new Color(242, 203, 130));
       g2d.fillOval(x + 16, y + 16, 29, 29);
   }

   private void drawPlate(Graphics g2d, int x, int y) {

       try {
           for (int r = 0; r < x; r++) {
               for (int c = 0; c < y; c++) {
                   drawPlateField((Graphics2D) g2d, c * 60, r * 60);
               }

           }

       } catch (Exception e) {
           System.out.print(e);
           }

   }
}
Aufgerufen werden die Platten mit folgender Main-Methode:
Code:
public class Test {

   public static void main(String[] args) {

        Plate b0 = new Plate(2, 3);
        Plate c0 = new Plate(2, 3);
        Plate d0 = new Plate(2, 3);
        Plate e0 = new Plate(2, 3);
        Plate f0 = new Plate(2, 2);
        Plate g0 = new Plate(2, 2);
        Plate h0 = new Plate(2, 2);
        Plate i0 = new Plate(2, 2);
        Plate j0 = new Plate(2, 2);
        Plate k0 = new Plate(1, 3);
        Plate l0 = new Plate(1, 3);
        Plate m0 = new Plate(1, 3);
        Plate n0 = new Plate(1, 3);
        Plate o0 = new Plate(1, 2);
        Plate p0 = new Plate(1, 2);
        Plate q0 = new Plate(1, 2);
        Plate r0 = new Plate(1, 2);

        b0.showPlate();
        c0.showPlate();
        d0.showPlate();
        e0.showPlate();
        f0.showPlate();
        g0.showPlate();
        h0.showPlate();
        i0.showPlate();
        j0.showPlate();
        k0.showPlate();
        l0.showPlate();
        m0.showPlate();
        n0.showPlate();
        o0.showPlate();
        p0.showPlate();
        q0.showPlate();
        r0.showPlate();
       }
}
Mit diesen Klassen kann ich mir schon mal jede Plattengröße ausgeben lassen, sowohl auf der Konsole, als auch zeichnen lassen bei entsprechendem Aufruf. Logischerweise hat aber jede Platte die Kodierung "b0" für jedes einzelne Feld, weil ich im Augenblick diese Werte im Konstrukor zuweise. Ich möchte meinen Konstruktor jetzt dahingehend ändern, dass ich die beiden Enum-Werte als Parameter im Aufruf übergebe, etwa in dieser Art:
Code:
public class Test {

   public static void main(String[] args) {

        Plate b0 = new Plate(2, 3, EFieldStatePlate, EFieldStateMarble);
        b0.showPlate();
       }
}
Ich habe aber leider keine Idee, wie ich meinen Konstruktor in der Klasse Plate die Enum-Werte als Parameter übergeben kann. Kann mir jemand helfen?
Vielen Dank!
 

mrBrown

Super-Moderator
Mitarbeiter
Genauso wie den alles andere auch übergibst, den Konstruktor um die beiden Argumente erweitern, und die dann ganz normal übergeben:

Java:
public Plate(int r, int c,EFieldStatePlate fieldStatePlate, EFieldStateMarble fFieldStateMarble)

und
Java:
Plate b0 = new Plate(2, 3, EFieldStatePlate.A10, EFieldStateMarble.RED);

Allerdings finde ich die Verwendung von Enums da eher zweifelhaft, Buchstabe und Zahl haben doch sicher irgendwelche sinnvollen Bedeutungen?

-----

Sollen es abwechselnd 'b' und 'c' sein, die toString zurückgibt?
 

fischebr

Mitglied
Vielen Dank für deine schnelle Antwort.
Die Buchstaben bezeichnen die Spielplatten, 'b', 'c', 'd' und 'e' zum Beispiel kennzeichnen jeweils, dass eine 6er Platte (2x3 Felder) verwendet wird, 'f' und 'g' bezeichnen eine 4er Platte (2x2), 'k' eine 3er Platte (1x3), etc. Es gibt insgesamt 4 x 6er Platten, 5 x 4er Platten, 4 x 3er Platten und 4 x 2er Platten, insgesamt 17 Platten. Lege ich jetzt meine Platte B6, habe ich insgesamt 6 Felder die mit 'b0' kodiert sind, 'b', weil ich die Platte B6 verwendet habe, '0', weil noch keine Spielstein drauf liegt. Lege ich jetzt eine 3er Platte an, kann die z.B. die Kodierung 'k0' haben, lege ich noch ein 3er Platte an, erhält sie z.B. die Kodierung 'l0', eine 2er Platte könnte 'p0' kodiert sein. Wird jetzt z.B. auf die B6-Platte eine schwarze Murmel gelegt, ändert sich die Kodierung auf diesem Feld in 'b2'. Dann enthält die B6-Platte ein Feld mit 'b2' und fünf Felder mit 'b0'.
Die Buchstaben werden im Grunde genommen pro Spielpartie einmal gesetzt, weil man sich mit den Platten das Spielfeld zusammensetzt. Die Zahlen ändern sich, wenn man auf dem jeweiligen Feld gesetzt hat.
Beginnt ein neues Spiel, können die Platten natürlich ganz anders gelegt werden, und dann wird auch auf die Buchstaben wieder neu zugegriffen.
 

fischebr

Mitglied
Nachtrag: 'a' kodiert die maximal zulässige Spielfeldfläche, die in Länge und Höhe maximal 10 Felder betragen darf. Das ganze Spielfeld ist also mit 100 Feldern mit der Kodierung 'a0' initialisiert. Legt man alle 17 Platten ab, bleiben ein paar Felder mit der Kodierung 'a0' übrig, auf die auch keine Spielsteine gelegt werden dürfen.
 

fischebr

Mitglied
Ich habe das jetzt gerade mal umgesetzt:
Code:
    // Konstruktor
   public Plate(int r, int c, EFieldStatePlate fieldStatePlate, EFieldStateMarble fieldStateMarble) {
       plate = new String[r][c];
       for (r = 0; r < plate.length; r++) { // waagerecht
           for (c = 0; c < plate[r].length; c++) { // senkrecht
               plate[r][c] = fieldStatePlate + fieldStateMarble; // Codierung Feld
           }

       }
   }
Ich erhalte jetzt aber eine Fehlermeldung in der letzten Zeile mit dem Code "plate[r][c] = fieldStatePlate + fieldStateMarble; // Codierung Feld".
Sie lautet "The operator + is undefined for the argument type(s) EFieldStatePlate, EFieldStateMarble"
Sorry, ich bin in Java noch sehr unerfahren. Wie konkateniere ich den jetzt die beiden Variablen miteinander?
 

mrBrown

Super-Moderator
Mitarbeiter
Ich erhalte jetzt aber eine Fehlermeldung in der letzten Zeile mit dem Code "plate[r][c] = fieldStatePlate + fieldStateMarble; // Codierung Feld".
Sie lautet "The operator + is undefined for the argument type(s) EFieldStatePlate, EFieldStateMarble"
Sorry, ich bin in Java noch sehr unerfahren. Wie konkateniere ich den jetzt die beiden Variablen miteinander?

Code:
plate[r][c] = fieldStatePlate.toString() + fieldStateMarble.toString();[/icode]

Du willst ja deren String-Repräsentation aneinanderhängen, nicht die Werte addieren ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
C Datentypen Enum-Werte Bestanteil von anderem Enum Allgemeine Java-Themen 8
J Best Practice Generics mit Enum Allgemeine Java-Themen 3
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
E Eigenen "Aufzählungstyp" erstellen - mit enum ? Allgemeine Java-Themen 18
I Enum gegen Enum tauschen Allgemeine Java-Themen 1
Neumi5694 Interface Generics für Enum-Filterung verwenden Allgemeine Java-Themen 5
perlenfischer1984 TestNG - Enum testen Allgemeine Java-Themen 1
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
Q Enum Allgemeine Java-Themen 3
F Enum und Klasseninhalt Allgemeine Java-Themen 1
K Enum mit switch Allgemeine Java-Themen 2
D Enum Kategorien Allgemeine Java-Themen 10
M Enum austauschbar machen Allgemeine Java-Themen 3
Rudolf State Pattern als Enum? Allgemeine Java-Themen 10
E Klassen Enum überladen od. austauschbar machen? Allgemeine Java-Themen 2
EnHancEd[] kurze enum-Frage Allgemeine Java-Themen 4
X Java findet eine Enum Klasse nicht Allgemeine Java-Themen 2
A Dynamisches Enum? Allgemeine Java-Themen 2
E Wert von enum zur Laufzeit festlegen. Allgemeine Java-Themen 5
D Methode für generische enummap/enum Allgemeine Java-Themen 10
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
L HashMap mit Enum Keys Allgemeine Java-Themen 3
G Enum mit Array Allgemeine Java-Themen 3
D Wie prüfen, ob ein String Teil eines Enum Types ist? Allgemeine Java-Themen 12
H2SO3- Enum mit Java 1.4 Allgemeine Java-Themen 6
S Erstes Enum bekommen? Allgemeine Java-Themen 2
M Verständnis enum - switch Allgemeine Java-Themen 2
R Java enum switch Allgemeine Java-Themen 11
S Enum-Class valueOf Function? Allgemeine Java-Themen 1
R Java enum Allgemeine Java-Themen 5
J Enum Problem: compiliert nicht mit Sun's compiler. Allgemeine Java-Themen 2
V Wie Enum an Funktion "übergeben" ? Allgemeine Java-Themen 4
N Java und Enum Allgemeine Java-Themen 3
GilbertGrape persistentes Enum oder Konstanten? Allgemeine Java-Themen 3
G enum Integer zuweisen Allgemeine Java-Themen 14
G class, interface, or enum exp? Allgemeine Java-Themen 2
P enum Allgemeine Java-Themen 7
S Java Enum und ordinal() Allgemeine Java-Themen 4
S Enum Fehler Allgemeine Java-Themen 17
C Enum-namespace ? Allgemeine Java-Themen 5
G Effizienz von enum vs. Konstanten Allgemeine Java-Themen 4
C enum und Vererbung Allgemeine Java-Themen 3
K Warunung und Fehler bei Enum.valueOf Allgemeine Java-Themen 2
C enum Strings mit punkt ? Allgemeine Java-Themen 3
J Enum in Java Allgemeine Java-Themen 19
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C In DefaultTableModel nachträglich Werte einfügen Allgemeine Java-Themen 2
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
berserkerdq2 Kann man in IJVM maximal 3 Werte im Stack haben? Allgemeine Java-Themen 3
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
Henrithebegiinerofjava Erste Schritte Werte in Eingabefelder einlesen und wiederholen lassen. Allgemeine Java-Themen 3
I Java: public final Werte: Gute oder schlechte Praxis? Allgemeine Java-Themen 6
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
J Swing UIManager Werte Allgemeine Java-Themen 6
4 Java 2 ArrayListen Werte herauslesen/übernehmen Allgemeine Java-Themen 4
KeVoZ_ int Werte in einen String fassen Allgemeine Java-Themen 4
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Übergebene Werte in Gerätedatei schreiben Allgemeine Java-Themen 2
M Exceltabelle in Java erstellen und Werte einlesen Allgemeine Java-Themen 32
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
R kann man irgendwie mit Arrays mit Eingabefenstern und Schleifen Werte abklappern? Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
R Variablen per HSSF geheime Werte von JAVA an EXCEL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
Q GregorianCalendar Methode add liefert komische Werte Allgemeine Java-Themen 3
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
M Aus Excel Tabelle lesen und Werte in Array speichern Allgemeine Java-Themen 15
A String Array Werte in neues String Array übernehmen Allgemeine Java-Themen 5
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
R Zusammenhängende Werte in 2-dim. Array finden und zählen Allgemeine Java-Themen 3
S Sinnvolles skalieren von Werte-Set? Allgemeine Java-Themen 2
S Keytool: mögliche Werte für Parameter Allgemeine Java-Themen 4
P Werte in Array zählen und Summe der einzelnen Teile ausgeben Allgemeine Java-Themen 10
L Veränderbare Werte zusammenfassen Allgemeine Java-Themen 18
P Variablen Werte der Objektvariablen mit getFields() abfragen Allgemeine Java-Themen 2
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
J JSONObject Reihenfolge der Werte? Allgemeine Java-Themen 4
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
c_sidi90 Werte an bestimmten Position aus PDF in DB sichern Allgemeine Java-Themen 2
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
C aus einem String einzelne Hex Werte lesen Allgemeine Java-Themen 7
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben