2D Array in jList einfügen

  • Themenstarter Themenstarter FranzFerdinand
  • Beginndatum Beginndatum
F

FranzFerdinand

Gast
Einen wunderschönen Guten Tag,

ich arbeite an meinem Kartenspiel. Jede Karte hat zwei Eigenschaften, die sie besitzt. Sie ist Teil eines Landes und sie hat ein Geschlecht. Also sowas wie Eine Französin oder ein Brite.

Es gibt 13 Länder und zwei Geschlechter. Ich hatte vor den Karten jeweils beide Eigenschaften über einen Array zuzuweisen.

Der Quelltext sieht nun so aus:
Java:
String[] laender = {"Deutscher", "Franzake", "Brite", "Ami", "Türke", "Inder", "Chinese", "Russe", "Spanier", "Kuba", "Afrikaner", "Italiener", "Joker"};
    String[] geschlecht = {"m", "w"};
    String[][] a = new String [13][1];
    for(int i=0; i<12; i++)
    { 
      for(int j=0; j<=1; j++)
      {
        a[i][j]=laender[i] + ";" + geschlecht[j];
        jListGastkarten.addElement([i][j]);
      }
    }

Bis auf die Zeile
Java:
jListGastkarten.addElement([i][j]);
funktioniert alles spitzenmäßig. Ich wollte mir nämlich dann am Ende eine Liste aller 26 Kärtchen, damit ich mal sehen kann, ob alles so klappt in einer jList ausgeben lassen. Diese heißt jListGastkarten.

Aber anscheinend läuft das mit addElement nicht so, wie ich es mir vorgestellt habe, dass ich da einfach so [j] integrieren kann.

Kann mir das mal jemand erklären und ggf. den Quelltext verbessern, was da in die Zeile besser reinpassen würde??

Danke schön! 🙂

Gruß
FranzFerdinand
 
Die Zeile
Java:
jListGastkarten.addElement([i][j]);
ist gar kein Statement.
Versuchs mal mit
Java:
jListGastkarten.addElement(a[i][j]);
und lerne die Grundlagen bzw. die Java-Syntax.
 
Und deine Array-Initialisierung sowie die for-Schleifen müssen verändert werden:
Wenn du n Elemente hast, muss das Array als [n] deklariert werden. Die Elemente können dann über [0] bis [length - 1] abgefragt werden.
- Dein String[][] a = new String [13][1]; muss geändert werden zu String[13][2]. So wie du dein Array deklariert hast, ist es de facto ein 1D array, genauso wie ein String[1] eigentlich ein normaler String ist mit dem Unterschied, daß er mutable ist.
- Die äußere Schleife for(int i=0; i<12; i++) muss geändert werden auf for(int i=0; i<13; i++)

Und "Afrikaner" als "Nationalität" taugt höchstens für den Kindergarten.

Ich frage lieber nicht, warum du das programmierst.
 
Was gebt ihr hier eigentlich für Tips?

Wenn ein Object mehrere Atribute hat, dann gehört es in eine eigene Klasse. In diesem Fall die Klasse Karte mit den Attributen Land und Geschlecht. Diese Karten gehören dann in eine Klasse KartenSet mit einem Attribut Karten aus Array, ArrayList, List oder was auch immer.

Gruß

Claus
 
Zuletzt bearbeitet:
[OT]
Natürlich sollten die Fragen die der TO stellt beantwortet werden (sofern möglich)!

Aber auch ein alternativer Ansatz darf natürlich erwähnt werden.
Ob dieser dem Kenntnisstand entspricht lässt sich nur schwer einschätzen. Hier muss jeder für sich entscheiden ob er dem TO die Alternative "zutraut".

Bitte aber beim Thema bleiben, Danke! 🙂
[/OT]
 
Hallöle meine Guten,

entschuldigt wenn meine Fragen manchmal etwas amateurhaft klingen, wir haben in der Schule Java nur 2,5 Monate behandelt und unser Infolehrer ist auch etwas inkompetent. Ich tue mein bestes das ganze zu verstehen, muss aber ab und an ein bisschen nachfragen.
Sonst krieg ich das Projekt, welches 4 Semesternoten eines ganzen Kurses ausmachen niemals fertig.
@Harry Kane: jListGastkarten.addElement(a[j]);
Funktioniert nicht so Recht, weil das ganze dann behauptet, AddElement wäre für diesen Typen nicht verfügbar.
Dass es [13][2] und nicht [13][1] heißt wusste ich. Das war das letzte, was ich korrigiert hatte, ich hab wohl dann noch aus der Zwischenablage das mit der 1 verschickt.

Was die Afrikaner angeht: Es ist nicht meine Erfindung. Wir sollen ein Spiel unserer Wahl programmieren. Ich programmiere das Spiel "Café International", da gibt es nun mal 12 Nationen und eine Joker-Nation, die man für alle 12 benutzen kann. Das sind genau die, die ich reingeschrieben habe. Die heißt im Grundspiel schlichtweg Afrikaner, dafür kann ich auch nichts.

Ich versuche mal in irgendeiner Weise eure Vorschläge umzusetzen, vielleicht kommt da ja mal ein seriöses Konstrukt heraus.

Gruß
Lukas
 
Sodele, ich hab mich mal ein wenig Belesen und bin nun zu folgendem Quelltext gekommen:
Java:
DefaultListModel jListGastkartenModel = new DefaultListModel();
    JList jList = new JList(jListGastkartenModel);
    JScrollPane jListGastkartenScrollPane = new JScrollPane(jListGastkarten);
    cp.add(jListGastkartenScrollPane, BorderLayout.CENTER);
    jListGastkarten.setModel(jListGastkartenModel);
    jListGastkartenScrollPane.setBounds(25, 210, 297, 121);
    cp.add(jListGastkartenScrollPane);
    jListGastkarten.setVisible(true);
    // Ende Komponenten
    
    setVisible(true);
    //=============================
    String[] laender = {"Deutscher", "Franzake", "Brite", "Ami", "Türke", "Inder", "Chinese", "Russe", "Spanier", "Kuba", "Afrikaner", "Italiener", "Joker"};
    String[] geschlecht = {"m", "w"};
    String[][] a = new String [13][2];
    
    
    for(int i=0; i<13; i++)
    { 
      for(int j=0; j<=1; j++)
      {
        a[i][j]=laender[i] + ";" + geschlecht[j];
        //jListGastkarten.addElement([i][j]);
        jListGastkartenModel.addElement(a[i][j]);
        
      }
      
    }

Es funktioniert nun hervorragend und er zeigt mir, wie ich es wollte 26 Elemente in der jList an. Vielen Lieben Dank an euch alle! 🙂

Läuft so weit alles. Wenn jemand von euch einen Vorschlag hat, wie ich das Programm kosmetisch seriöser gestalten sollte, falls es etwas zu kompliziert geschrieben sein sollte, dann meldet euch bitte. 🙂

Achso und um die beiden for-Schleifen habe ich noch eine weitere For-Schleife gebastelt:
Java:
for(int k=0;k<4;k++)
Diese hat den Zweck, dass alle Karten vier mal vorhanden sind. Ist im richtigen Spiel so.
Der array laender[12], also "Joker" wird jedoch als einziger nur zwei, statt vier mal hinzugefügt. Das vernachlässige ich jetzt erst einmal, damit das nicht so kompliziert wird.

GRuß
Lukas
 

Zurück
Oben