Integer aus Textdatei auslesen

@SlaterB :
Ich bin mir dem bewusst, dass das scheußlich aussieht. Ich bin daran gescheitert das Global einzulesen und mache das deswegen für jede Variable einzeln.
Wert einlesen, Sting in Integer umwandeln und ins Label packen. Umständlich, aber geht nicht einfacher, vorerst. Ich nehme das einfach so hin, erstmal. Was funktioniert und keine extreme Laufzeit generiert, muss erstmal nicht verbessert werden.
Wenn ich diesen ganzen Zirkus beendet habe, dass er das seriös einliest, dann kann ich mich darum bemühen.

@_Michael : Meinst Du jetzt, ich generiere die Enoms nochmal und lese dann ein, an welchen Positionen in der Liste die Werte gewesen sind?
Das geht auch, aber das ist mir ehrlich viel zu aufwendig und umständlich, das macht doch alles nur noch komplizierter?

Ich versuche mich gerade einfach nur daran, dem Programm beizubringen, dass da 100 Karten in einer Datei namens spielstand.txt sind und diese bitte eingelesen werden sollen und in die Liste gehören.

Danke an dieser Stelle allen, die es bis hierhin mit meiner Inkompetenz ausgehalten haben.:smiley:

Gruß
Lukas

[quote=FranzFerdinand]das ist natürlich auch ein netter Ansatz, aber das wirft irgendwie mein Konzept ein wenig auseinander, wie ich mir das ganze vorgestellt habe. Ich hab schon lange eine Vorstellung, wie ich das genau umsetze und würde das jetzt ungerne über den Haufen werfen und gerne so programmieren, wie es oben steht.[/quote]Schade, wieder einer der sein Pferd lieber zu tode reitet, als es rechtzeitig zu wechseln…

bye
TT

Du, sei mir nicht böse, ich arbeite seit 3 Wochen daran, an dem schwersten Teil meines Projektes, die 2Dimensionen Gastkarten zu generieren und ein korrektes Speichermanagement zu erbauen. Das danach zu programmieren ist recht einfach.

Ich habe jetzt 3 Wochen daran gesessen und alles fertig, bis auf das Einspeichern der Gastkarten in die Datei.
Ich kann mir das bei meinem Verständnis echt nicht erlauben, da jetzt komplett alles zu verändern. :wink:

Hat noch jemand einen Lösungsansatz?

*** Edit ***

Zu vorhin:
Das Programm was stehen bleibt und nicht startet.
Folgender Programmcode war das:

            String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n, gastkarten.get(n) + "");
            System.out.println(gastkartewiederhergestellt);
            //gastkarten.add(new Gastkarte(gastkartewiederhergestellt))
      }```

Die Konsole gibt mir dazu folgendes aus:

> Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
> 	at java.util.ArrayList.rangeCheck(ArrayList.java:635)
> 	at java.util.ArrayList.get(ArrayList.java:411)
> 	at spiel.CafeRoot.spielstand(CafeRoot.java:263)
> 	at spiel.CafeRoot.<init>(CafeRoot.java:147)
> 	at spiel.CafeRoot.main(CafeRoot.java:325)

so sieht ein zumindest arbeitendes Programm aus,
Fehler gibt es 100x am Tag, aber ‚startet gar nicht mehr‘ und komischer Smily, das ist gefährlich :wink:

wahrscheinlich GUI-Programm und nicht in die Konsole geschaut, das gibt es natürlich öfter,
auch hier gilt wieder: im wesentlichen oder bei neuen Funktionen alles lieber erstmal ohne GUI, ohne Eingabe oder sonstige Probleme mit System.out.println() durchlaufen lassen :wink:

ob der Fehler dir erklärbar ist oder nicht ist nicht zu erkennen,
sieht so aus als wäre gastkarten leer, Gründe dafür gibts viele auch ohne dass ich mir das Programm genauer anschauen muss,
prüfe es mit entsprechender Ausgabe falls noch nicht sicher,
verfolge nach, einerseits in deinem Programmplan als auch im Code, ob und wie die Liste gefüllt sein sollte,
korrigiere gegebenenfalls

wenn in der Schleife auskommentiert geaddet werden soll, dann ist offensichtlich nicht der Plan, dass die Liste schon gefüllt ist,
Defaultwert ist auch nicht zwingend, kann ein Dummy sein

Hallo SlaterB,

ich arbeite schon den ganzen Tag daran, diese eine Schleife zu bauen, die mir diese Werte richtig ausliest. Das Auskommentierte war ursprünglich zum hinzufügen gedacht, jedoch ging das ja noch nicht, weil schon die Zeile darüber nichts mehr richtig funktioniert hat. Geprüft mit println hat sich das bestätigt, dass die wahrlich NICHTS passiert.

Hättest Du eine Idee, wie man das kompetent und sinnvoll einlesen könnte?
Die Elemente werden korrekt abgespeichert, das funktioniert bereits und liegen dann wie erwähnt in der Datei in folgendem Format herum:

gastkarten37=Joker\:weiblich
gastkarten36=Franzake\:männlich
gastkarten35=Kubaner\:weiblich
gastkarten34=Joker\:weiblich
gastkarten99=Spanier\:männlich
gastkarten33=Amerikaner\:weiblich
gastkarten98=Spanier\:männlich
gastkarten32=Chinese\:weiblich

Gruß
Lukas

Probiere mal

                String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
                System.out.println(gastkartewiederhergestellt);
                //gastkarten.add(new Gastkarte(gastkartewiederhergestellt))
          }

[QUOTE=Crian]Probiere mal

                String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
                System.out.println(gastkartewiederhergestellt);
                //gastkarten.add(new Gastkarte(gastkartewiederhergestellt))
          }
```[/QUOTE]
Tatsache, das funktioniert, verdammte Axt! :D Ich habe echt gedacht, dass man da jetzt noch get(n) mitnutzen muss.
Also, das einlesen und ausgeben in der Konsole läuft wie geschmiert.

Ich habe das jetzt mal erweitert, ich muss die Elemente nämlich einzeln haben, also land und geschlecht und diese dann gemeinsam wieder in die Liste schreiben.
Wenn ich das hier schreibe, dann gibt er mir auch hintereinander beide einzeln aus:
```String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
            String[] einzelkarte = gastkartewiederhergestellt.split(":");
            System.out.println(einzelkarte[0]);
            System.out.println(einzelkarte[1]);```

Das läuft sehr gut.
Also bisher hab ich die ja immer eingefügt mit: `gastkarten.add(new Gastkarte(geschlecht, land));`

Die eigentlich Erzeugungsschleife für Karten in einem neuen, nicht wiederhergestellten Spiel läuft ja so ab:
```for(int j=0;j<2;j++){
	    	for(Land land : Land.values()) {
	            int anzahl = 2;
	            if (land == Land.Joker) {
	               anzahl = 1;
	            }
	            for(int i = 0; i < anzahl; i++) {
	                for(Geschlecht geschlecht : Geschlecht.values()) {
	                    gastkarten.add(new Gastkarte(geschlecht, land));
	                    restkartengast = restkartengast + 1;
	                }    
	            }
	        }
	    }```

Mit Land und Geschlecht hat das erstmal nichts am Hut, ich hab ja gesplittet auf `einzelkarte[0]` & `einzelkarte[1]`.
Also müsste er eigentlich mit `gastkarten.add(new Gastkarte(einzelkarte[0], einzelkarte[1]));` klarkommen. Aber so läuft das jetzt nicht.

Aber damit bin ich fast am Ziel angekommen.:)
Gruß
Lukas

falls noch nicht deutlich genug erwähnt wurde, dann eine weitere Grundweisheit: ‚läuft nicht‘ geht nicht als Fehlermeldung fürs Forum

es muss immer
A) ein Compilerfehler
oder B) eine Exception
und/ oder C) ein konkret beschriebenes Fehlverhalten (z.B. Daten X und Y statt A und B) vorliegen

aber gut, hier schon sichtbar, der Gastkarte-Konstruktor (ist im Falle eines Problems mit einem Konstruktor natürlich genau zu posten)
erwartet offensichtlich einen Parameter einer obszönen Klasse, keinen String,
da musst du erst den String umwandeln, Enum.valueOf() kann helfen

[QUOTE=SlaterB]falls noch nicht deutlich genug erwähnt wurde, dann eine weitere Grundweisheit: ‚läuft nicht‘ geht nicht als Fehlermeldung fürs Forum

es muss immer
A) ein Compilerfehler
oder B) eine Exception
und/ oder C) ein konkret beschriebenes Fehlverhalten (z.B. Daten X und Y statt A und B) vorliegen[/QUOTE]

Hallo,
entschuldige bitte. Ich nehme mir, wie man hoffentlich erkennt immer viel Zeit beim korrekten und möglich umfangreichen Posten meiner Beiträge. Manchmal rutscht mir das einfach mal unter nach nem langen Beitrag, dass ich vergesse dazu eine Fehlermeldung zu posten.

Also diese obszöne Gastkartenklasse sieht so aus:


public class Gastkarte {
	   public static enum Geschlecht {männlich, weiblich};
	   public static enum Land {Deutscher, Franzake, Brite, Amerikaner, Türke, Inder, Chinese, Russe, Spanier, Kubaner, Afrikaner, Italiener, Joker};
	 
	   public final Land land;
	   public final Geschlecht geschlecht;
	 
	   public Gastkarte(Geschlecht geschlecht, Land land){
	      this.land = land;
	      this.geschlecht= geschlecht;
	   }
	 
	   public String toString(){
	     return land + ":" + geschlecht;
	   }
	}

Der Konstruktor Gastkarte(string, string) ist nicht definiert, ist die Fehlermeldung, wenn ich gastkarten.add(new Gastkarte(einzelkarte[0], einzelkarte[1])); eingebe.
Aber ich sehe schon, dass das nicht läuft ist logisch, die Klasse Gastkarte gibt ja auch vor, dass da was völlig anderes eingefügt werden muss.

Im Zuge meines Studiums diverser Java-Stoffe bin ich auch gerade bei Enums angelangt. Ich werde mir deinen letzten Absatz mal zu Gemüte führen.

Gruß
Lukas :slight_smile:

Eigentlich wollt ich das Thema für heute ruhen lassen, weil mich das heute genug Nerven gekostet hat.
Aber ich habs noch einmal versucht:

            String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
            String[] einzelkarte = gastkartewiederhergestellt.split(":");
            System.out.println(einzelkarte[0]);
            System.out.println(einzelkarte[1]);
      }```

Das gibt mir alle Gastkarten in Reihenfolge und in Land und Geschlecht gesplitet aus. Feine Sache.:D

`gastkarten.add(new Gastkarte(einzelkarte[0], einzelkarte[1]));` funktioniert nicht:

> Der Konstruktor Gastkarte(string, string) ist nicht definiert


Ich hab mich mehr schlecht als Recht mit diesem komischen valueOf beschäftigt. Das Internet kennt dazu echt keine seriösen Anleitungen. Und irgendwie weiß ich auch nicht, wieso ich das für mein Problem brauchen könnte?

So, wie ich das verstanden habe, soll das so funktionieren:
```Land land = Land.valueOf(Gastkarte);```
Bis auf das Element in den Klammern macht er auch keinen Stress.-_-

> Gastkarte cannot be resolved to a variable.

heißt es hier.

Aber mal im Ernst, wozu brauche ich das? Kann ich das nicht auch so irgendwie in diese Liste einfügen?

Gruß
Lukas

[quote=FranzFerdinand]gastkarten.add(new Gastkarte(einzelkarte[0], einzelkarte[1])); funktioniert nicht:
Der Konstruktor Gastkarte(string, string) ist nicht definiert[/quote]
Die Meldung ist doch ziemlich deutlich. Für die Klasse Gastkarte gibt es nur einen Konstruktor und der erwartet ein Enum vom Typ Land und als zweites einen Enum vom Typ Geschlecht.
einzelkarte ist aber ein String Array und einzelkarte[0] bzw. [1] sind Strings. Zur Lösungsfindung einfach ein bisschen über die Ausgangsituation nachdenken. Gegen sind zwei Strings, benötigt werden entweder zwei Enums oder ein zusätzlicher Konstruktor in der Klasse Gastkarte der mit Strings umgehen kann.
Hier hilft die Methode valueof: Land.valueOf("Brite") liefert den Enum Land.Brite und Geschlecht.valueof("weiblich") liefert Geschlecht.weiblich. Nun hast Du einen Enum Land und Geschlecht und kannst z.B. damit über den gegebenen Konstruktor eine Gastkarte erzeugen.

Jetzt verstehe ich das ganze auch, danke schön. Ich hab ewig danach gegooglet, wie das funktioniert. Naja, mein Englisch ist auch nicht das beste und das Internet hatte keine Anleitungen, die mir das korrekt verdeutlicht haben.
Ich konnte die Werte nun korrekt kompilieren.

Also, mein Code an dieser Stelle sieht nun folgendermaßen aus:

      jListGastkartenModel.clear();
      Geschlecht.valueOf("männlich");
      Geschlecht.valueOf("weiblich");
      Land.valueOf("Deutscher");
      Land.valueOf("Franzake");
      Land.valueOf("Brite");
      Land.valueOf("Amerikaner");
      Land.valueOf("Türke");
      Land.valueOf("Inder");
      Land.valueOf("Chinese");
      Land.valueOf("Russe");
      Land.valueOf("Spanier");
      Land.valueOf("Kubaner");
      Land.valueOf("Afrikaner");
      Land.valueOf("Italiener");
      Land.valueOf("Joker");
      for (int n=0;n<restkartengast;n++) {
            String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
            String[] einzelkarte = gastkartewiederhergestellt.split(":");
            System.out.println(einzelkarte[0]);
            System.out.println(einzelkarte[1]);
            
            for(Land land : Land.values()) {
            	for(Geschlecht geschlecht : Geschlecht.values()) {
            		gastkarten.add(new Gastkarte(geschlecht, land));
            	}
            } 
      }
      for(int y=0;y<gastkarten.size();y++){
	    	jListGastkartenModel.addElement(gastkarten.get(y));
	    }
      System.out.println("Ein altes Spiel wurde wiederhergestellt");```
Anfangs leere ich erstmal sowohl meine Liste, als auch meine jList. Kann ich mir zwar nicht vorstellen, aber kann ja sein, dass da irgendwelche Rückstände drin sind. Anschließend wandle ich mir mit valueOf meine 13 Länder und 2 Geschlechter um, das läuft auch.
Es läuft alles bis zum Splitten der Elemente und dem Ausgeben der Einzelteile. Also bis hierhin: `System.out.println(einzelkarte[1]);`
De Konsole gibt mir dann tatsächlich alle Elemente in der Reihenfolge, wie ich sie vorher in der Datei abgespeichert habe, ab. Natürlich wie vorgesehen getrennt.
Also:

> Amerikaner
> Weiblich
> Deutscher
> Männlich
> Türke
> Weiblich
> usw.


Läuft alles. Doch dann geht das nicht korrekt weiter. Der nächste und letzte Schrift wäre das ganze in die Liste einzubauen und dann in die jList komplett sortiert zu integrieren.
Leider passiert da etwas unerwartetes. Wie ich es mir eigentlich vorher hätte denken müssen. Die For-Schleife geht alles in Reihenfolge durch und arbeitet das sortiert ab und fügt alles ein. Und das in unvorstellbarer Menge. Also nicht nur 100 Karten, sondern eine Vielzahl davon. Vielleicht bzw. wahrscheinlich `y<gastkarten.size()`.
Ich wollte es mit einem Zähler mitzählen, aber der Zähler hat mir wegen einer zu großen Zahl nichts ausgegeben. Und auch meine bisherigen Methode: Strg+A in der jList und dann in Excel einfügen und die Zeilennummer ablesen ging nicht. Es war eine so große Masse an Elementen, dass Excel das nicht durchgehalten hat.
Also es sind auf jeden Fall zu viele.

Das hier war bis dato aber eigentlich meine einzige Idee das zuzuordnen, aber ist ja auch logisch, der zählt dann alles durch, ohne vorher meine Sortierreihenfolge zu beachten. Blöd.
```for(Land land : Land.values()) {
            	for(Geschlecht geschlecht : Geschlecht.values()) {```

Hat jemand einen klugen Einfall dazu?

gruß
Lukas

[quote=FranzFerdinand]Also, mein Code an dieser Stelle sieht nun folgendermaßen aus:

      jListGastkartenModel.clear();
      Geschlecht.valueOf("männlich");
      Geschlecht.valueOf("weiblich");
      Land.valueOf("Deutscher");
      Land.valueOf("Franzake");
      Land.valueOf("Brite");
      Land.valueOf("Amerikaner");
      Land.valueOf("Türke");
      Land.valueOf("Inder");
      Land.valueOf("Chinese");
      Land.valueOf("Russe");
      Land.valueOf("Spanier");
      Land.valueOf("Kubaner");
      Land.valueOf("Afrikaner");
      Land.valueOf("Italiener");
      Land.valueOf("Joker");
      for (int n=0;n<restkartengast;n++) {
            String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
            String[] einzelkarte = gastkartewiederhergestellt.split(":");
            System.out.println(einzelkarte[0]);
            System.out.println(einzelkarte[1]);
           
            for(Land land : Land.values()) {
                for(Geschlecht geschlecht : Geschlecht.values()) {
                    gastkarten.add(new Gastkarte(geschlecht, land));
                }
            }
      }
      for(int y=0;y<gastkarten.size();y++){
            jListGastkartenModel.addElement(gastkarten.get(y));
        }
      System.out.println("Ein altes Spiel wurde wiederhergestellt");```
[/quote]
Was bezweckst Du mit dem Code? Ist Dir bewusst was hier passiert?
Zeile 2 bis 17 sind eigentlich überflüssig, da sie nichts bewirken.
Die Information aus Zeile 19 und 20 wird auch nur dafür genutzt, um sie auf der Konsole auszugeben.

Mit den drei ineinander verschachtelten Schleifen erzeugst Du restkartengast * Land.values().length * Geschlecht.value().length Gastkarten. Das ist zumindest ein Grund warum die Liste soviele Elemente enthält.

Hallo und Danke für Deine Antwort,

ich bin mir dem Code bewusst, ja, war wohl eine kleine Unachtsamkeit, keine Ahnung wieso ich das jetzt so eingebaut habe, wie es ist.
Wieso nutzen die Zeilen 2 bis 17 nichts? Das ist doch gerade das, was ich brauche zum Umwandeln?

Und ich habe ehrlich gesagt nach wie vor keine Idee, wie ich der list Gastgarten die Info übergeben kann, dass diese 100 Karten aus der Speicherdatei wiedereingefügt werden sollen. :frowning:
Hat da wer einen kleinen Einfall, gerne auch mit Code?

Schönen Sonntag!
Lukas :slight_smile:

[quote=FranzFerdinand]Und ich habe ehrlich gesagt nach wie vor keine Idee, wie ich der list Gastgarten die Info übergeben kann, dass diese 100 Karten aus der Speicherdatei wiedereingefügt werden sollen.[/quote]Darüber hatten wir doch schon gesprochen und Du hast behauptet, dass Du die Karten programmatisch erzeugts.

Also sind nicht die Karten aus der Datei zu laden, sondern deren Zuordnung zu den Spielern.

Leider konnte ich Deinen Codegewirr nicht entnehmen, wie Du diese Zuordnug in Deinem Programm realisierst. Und ich denke, dass hier auch Dein Haupt-Problem liegt: Du hast eine Vorstellung davon, wie Dein Spiel auf dem Bildschirm aussehen soll. Was Du nicht hast ist ein Plan, welche Objekte in Deinem Spiel existieren und wie diese miteinander in Beziehung stehen.

Momentan bist Du in Deiner “Lösung” festgefahren. Wenn Du so weiter machst wirst Du Dein Projekt nicht fertig bekommen.

Auch wenn es hart ist: Vergiss was Du bisher hast und fang noch mal sauber mit den Grundlagen an. Konzentriere Dich zunächst auf das Modell (also die Spieler und die Karten und deren Interaktionen) ohne an die GUI zu denken.

Wenn die “Engine” funktioniert kannst Du an Speichern/Laden und Visualisierung arbeiten.

bye
TT

denke nicht in abstrakten Zauber-Sphären, sondern ganz ordinär, was leisten diese Zeilen?
was ist der Unterschied von vorher zu nachher?
direkt eine lokale Variable ist ja nicht beteiligt,
sollte sich in der Enum-Klasse was ändern, die Enum-Werte initialisiert werden oder so?
nein, es passiert exakt nichts dauerhaftes

an der Stelle, an der du Strings einliest und Enum-Werte für den Konstruktor haben willst, da machst du dagegen nichts,
was haben Codezeilen irgendwo anders im Programm damit zu tun? (außer mal wichtiges wie überhaupt Definition der Klassen)

es würde dir in der Schleife ja auch nicht helfen wenn du irgendwo anders einmal String.split() ausprobierst…
einfaches Bauen: dort wo du den String hast, dort musst du diesen konkreten String umwandeln in einen Enum-Wert, diesen für den Konstruktor verwenden

            String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
            String[] einzelkarte = gastkartewiederhergestellt.split(":");
            System.out.println(einzelkarte[0]);
            System.out.println(einzelkarte[1]);
            Geschlecht g = Geschlecht.valueOf(einzelkarte[0]);
            Land l = Land.valueOf(einzelkarte[1]);
            gastkarten.add(new Gastkarte(g, l));
      }

die inneren Schleifen waren genauso verrückt, über so einfache Dinge musst du einen klaren Kopf behalten,
eine Schleife ist natürlich nicht undenkbar wenn sie einen Zweck hat:
gäbe es etwa die valueOf-Methode nicht, dann könntest du tatsächlich über alle Enum-Werte iterieren,
Strings vergleichen und so den Enum-Wert heraussuchen, der aktuell benötigt wird,
die valueOf-Methode macht das intern auf falls nicht mit Map noch besser gelöst

das wäre eine Schleife mit klarer Aufgabe und klarem Code (oder mit Fehler und dran zu arbeiten),
aber eine Schleife über alle bekannten Werte und damit Gastkarte-Objekte zu erstellen, ohne Bezug auf aktuellen Property, das ist Unsinn,

passiert natürlich, nicht schlimm, aber bitte den Unterschied zu normalen Programmierfehlern erkennen,
beliebig Code aneinanderreihen ist kein erlaubtes Konzept

Einen wunderschönen Guten Tag und vielen Liebe Dank euch beiden und allen, die mir geholfen haben.

Das Programm funktioniert nun so, wie es sollte. Dies tut es dank des Vorschlages von SlaterB. Du wolltest mich sicherlich testen:

            String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
            String[] einzelkarte = gastkartewiederhergestellt.split(":");
            System.out.println(einzelkarte[0]);
            System.out.println(einzelkarte[1]);
            Geschlecht g = Geschlecht.valueOf(einzelkarte[0]);
            Land l = Land.valueOf(einzelkarte[1]);
            gastkarten.add(new Gastkarte(g, l));
      }```

Bei `Geschlecht g` und `Land l` waren die Parameter von `einzelkarte`, also 0 und 1 vertauscht. Hätte wahrscheinlich zu ein paar kleinen Fehlern geführt.
So wie es jetzt ist, läuft es.
Das `System.out.prinln` habe ich wieder entfernt und lasse einfach ganz am Ende einmal die ganze Liste Gastkarten zum testen in der Konsole ausgeben. So macht er das auch am Anfang des Spiels, wenn er aus einem neuen Spiel heraus startet.

Das ist mein Endcode, den ich noch dahinter gebastelt habe:
```for(int y=0;y<gastkarten.size();y++){
	    	jListGastkartenModel.addElement(gastkarten.get(y));
	  }
      System.out.println("Ein altes Spiel wurde wiederhergestellt");
      System.out.println(gastkarten);```

Der ist auch schon generell beim Gastkarten mischen dabei, der fügt das Zeuchs aus der List einfach in Reihenfolge in die jList ein. So läuft das ganze nun.

=====
Und nun noch einmal etwas generelles:

> Momentan bist Du in Deiner "Lösung" festgefahren. Wenn Du so weiter machst wirst Du Dein Projekt nicht fertig bekommen.
> 
> Auch wenn es hart ist: Vergiss was Du bisher hast und fang noch mal sauber mit den Grundlagen an. Konzentriere Dich zunächst auf das Modell (also die Spieler und die Karten und deren Interaktionen) ohne an die GUI zu denken. 
> 
> Wenn die "Engine" funktioniert kannst Du an Speichern/Laden und Visualisierung arbeiten.

Ich bin mir dem durchaus bewusst. Ich bin leider etwas beratungsresistent, muss ich zugeben. Ich wollte das mit der korrekten Kartenerzeugung und die Spielstandsspeicherung gleich zu Anfang weg haben, weil das meine beiden größten Baustellen sind. Was den Rest des Projektes angeht, arbeite ich immer nebenbei separat weiter, das ist eigentlich relativ einfach und stellt keine größeren Herausforderungen mehr dar.
Was ich persönlich noch dringend machen muss, ist das auslagern in Methoden und Klassen, da ich bisher mehr Schlecht als Recht mit Objektorientierung gearbeitet habe.

Ich persönlich habe mich eine Menge mit Swift und Python beschäftigt und arbeite daran auch. Java wurde mir leider nur Halbherzig im Informatikunterricht übergeholfen und nun ein ganzes Projekt ans Bein gebunden. Unser Infolehrer hat im Unterricht nicht einmal die Wörter "Klasse", "Methode" oder "Vererbung" in den Mund genommen. Unglaublich schade.
Auch wenn es manchmal so aussieht. Ich mag es nicht, wenn man mir alles vorsagt, ich recherchiere und teste alles mögliche nebenbei und belese mich weiter zu dem Thema. Ich versuche weitgehend den Code, den man mir angibt zu verstehen und nachvollziehen. Sieht halt manchmal etwas unbeholfen aus.

Wunderschöne Grüße und vielmals Dankeschön!
```for(int n;n<∞;n++) {
System.out.println("Dankeschön! :)");
}

Lukas :slight_smile:

[quote=FranzFerdinand]Das ist mein Endcode, den ich noch dahinter gebastelt habe:

    jListGastkartenModel.addElement(gastkarten.get(y));
}```

Der ist auch schon generell beim Gastkarten mischen dabei, der fügt das Zeuchs aus der List einfach in Reihenfolge in die jList ein. So läuft das ganze nun.[/quote]
Auch wenn's jetzt läuft noch ein Hinweis zum obigen Code:
Wenn Du das direkt beim Befüllen der ArrayList machst, kannst Du Dir die zweite Schleife sparen. Wenn Du die ArrayList in dem Fall nur zum Befüllen benötigst, könnte man sich auch die ArrayList bzw. deren Befüllen sparen.

[QUOTE=_Michael;104988]Auch wenn’s jetzt läuft noch ein Hinweis zum obigen Code:
Wenn Du das direkt beim Befüllen der ArrayList machst, kannst Du Dir die zweite Schleife sparen. Wenn Du die ArrayList in dem Fall nur zum Befüllen benötigst, könnte man sich auch die ArrayList bzw. deren Befüllen sparen.[/QUOTE]

Hallöle,

vielen Dank für den Hinweis. Das ist mir inzwischen schon aufgefallen. Nach Finden meiner oben geposteten Lösung hab ich mich ein wenig mit Codekosmetik befasst, da ist das natürlich ein sehr offensichtliches Element.

Vielen Dank trotzdem! Jemand der meinen Code gelesen hat. :slight_smile:

Gruß
Lukas

allgemein ist die längere Variante aber auch nicht zu verachten:
Aufgaben trennen, das Einlesen von der Datei muss nicht mit der GUI verknüpft sein,
gerade zum Testen kann der Aufrufer einer solchen Methode System.out.println() verwenden :wink: oder eine Test-Klasse sein

an das JList-Model will man vielleicht nicht nur Daten aus Datei sondern auch direkt generierte Liste übergeben,
in solch aufgeräumten Fällen mit getrennten Methoden kommt es auf eine Schleife mehr oder weniger nicht an,
einfache Listen zur Übertragung eine gute Sache dann