While-Schleife macht nicht was sie soll

Reggie()

Bekanntes Mitglied
hi. im Zuge meines "Lernprojektes MauMau" kommt es in einer While-Schleife zu einer Reaktion, die ich einfach nicht verstehe (kein Compiler-Fehler!). Hier der Code-Ausschnitt
Java:
  public static void austeilen() {
    // 6 Karten auf die Hand jedes Spielers
    for(int x=0; x<6; x++) {
      sp.get(0).hand.add(ziehstapel.remove(0));
      sp.get(1).hand.add(ziehstapel.remove(0));
      sp.get(2).hand.add(ziehstapel.remove(0));
    }
    // Aufdecken der ersten Karte bis es kein Bube, 7 oder 8 mehr ist
    zeigeStapel(ziehstapel, "Ziehstapel");
    System.out.println("Aufdecken der ersten Karte.");
    ablagestapel.add(ziehstapel.remove(0));
    System.out.println(ablagestapel.get(0).farbe + ablagestapel.get(0).wert + " aufgedeckt.");
    zeigeStapel(ablagestapel, "Ablagestapel");
    while (sonder()) {
      System.out.println(aktuelleKarte() + " ist keine gültige Startkarte."); 
      ablagestapel.add(ziehstapel.remove(0));
      System.out.println(aktuelleKarte() + " aufgedeckt.");
    }
  }
Die betreffenden Variablen sind wie folt deklariert und Initialisiert:
Java:
  static List<Karte> ziehstapel = new ArrayList<Karte>();
  static List<Karte> ablagestapel = new ArrayList<Karte>();
ich habe das Problem auch lokalisiert. es ist [iicode]ablagestapel.add(ziehstapel.remove(0));[/icode] in der while-schleife. dieser Befehl wird einfach nicht ausgeführt, obwohl er funktioniert, was er auch schon 5 Zeilen darüber richtig macht. Also muss es an der while-Schleife liegen. Ich kann mir aber nicht vorstellen, dass man in einer while-schleife nicht auf statische Attribute in dieser Klasse zugreifen kann. HILFE
 

JStein52

Top Contributor
Sind denn in deinem ziehStapel überhaupt noch Karten drin wenn du in diese Schleife kommst ? Du removest ja weiter oben schon dauernd welche ?
 

Reggie()

Bekanntes Mitglied
ja, ich habe auch zur Kontrolle immer die Größe der Stapel mit ausgeben lassen. Daher weiss ich auch jetzt, dass es doch nicht an ablagestapel.add(ziehstapel.remove(0)); liegt, denn er übergibt tatsächlich jedesmal eine Karte (remove->add). aber der folgende zugriff auf die oberste Karte mit .get(0) scheint innerhalb der Schleife nicht zu funktionieren. er zeigt immer wieder die selbe Karte an, obwohl sie das längst nicht mehr ist.
 

Reggie()

Bekanntes Mitglied
Das ist aber sicher die "oberste" Karte, die Frage ist nur warum ? Aber den Code dazu sieht man ja nicht. Und so lange du sie nicht entfernst kriegst du mit get(0) natürlich immer die gleiche Karte.
hiermit ablagestapel.add(ziehstapel.remove(0)); wird die oberste Karte vom ziehstapel entfernt und als oberste Karte auf den ablagestapel gepackt. bei jedem Schleifendurchlauf. warum er dann immer die selbe Karte anzeigt ist mir schleierhaft.
 

Joose

Top Contributor

Reggie()

Bekanntes Mitglied
die Methode aktuelleKarte prüft, ob die oberste (aktuelle) Karte des Ablagestapels ein Bube, eine 7 oder eine 8 ist (über das Attribut wert). wenn das der Fall ist, soll der Vorgang wiederholt werden, bis es nicht mehr zutrifft, also eine "gültige" Karte aufgedeckt wird.
 

Joose

Top Contributor
die Methode aktuelleKarte prüft, ob die oberste (aktuelle) Karte des Ablagestapels ....
Bist du dir sicher dass du uns jetzt erklärt hast was die Methode aktuelleKarte() wirklich macht? Oder hast du uns gesagt was die while-Schleife prüft?
Außerdem ist es besser uns den entsprechenden Code zu zeigen ;) der Erklärung nach hört es sich zwar richtig an, aber es kann leicht sein dass du im Code irgendwo einen kleinen Fehler hast der eben große/falsche Auswirkungen auf den Ablauf hat!
 

Reggie()

Bekanntes Mitglied
Der Begriff "oben" ist dann aber einmal der 0.te Eintrag (im ziehStapel) und einmal der n.te Eintrag (im ablageStapel). Das hast du schon berücksichtigt ?
ablagestapel.add(ziehstapel.remove(0)); entfernt das Element mit index 0 aus dem ziehstapel und fügt es als Element mit index 0 dem ablagestapel zu. was meinst du mit n.ten Eintrag?
sonder() in der while-Bedingung prüft das Attribut der aktuellen Karte ablagestapel.get(0).wert on 7, 8 oder Bube und gibt in dem Fall boolean true zurück
aktuelleKarte() gibt einen String zurück ablagestapel.get(0).farbe + ablagestapel.get(0).wert
 

Reggie()

Bekanntes Mitglied
ich war mir eigentlich sicher, dass mit add das neue Element den index 0 bekommt und der rest "runterrutscht", aber das kann ich prüfen. ich muss mir ja nur alle Elemente mit index ausgeben lassen.
fängt for (Karte k : ablagestapel) bei idex 0 oder hinten an?
 

Joose

Top Contributor
Java:
for (Karte k : ablagestapel) {
   // DER CODE IN DER SCHLEIFE
}
ist ein Synonym für
Java:
for(int i = 0; i <ablagestapel.size(); i++) {
    Karte k = ablagestapel.get(i);
   // DER CODE IN DER SCHLEIFE
}
 

Reggie()

Bekanntes Mitglied
ok, dann habe ich jetzt die Lösung meines Problems. ich nutze einfach statt der add(Element e) die überlagerte Methode add(int index, Element e). laut Dokumentation macht es genau das, was ich will, mit ablagestapel.add(0, ziehstapel.remove(0)); schiebe ich die neue Karte ganz "oben" (index 0) rein
 

Flown

Administrator
Mitarbeiter
Java:
for (Karte k : ablagestapel) {
   // DER CODE IN DER SCHLEIFE
}
ist ein Synonym für
Java:
for(int i = 0; i <ablagestapel.size(); i++) {
    Karte k = ablagestapel.get(i);
   // DER CODE IN DER SCHLEIFE
}
Berichtige. Es ist ein Synonym für:
Java:
for (Iterator<Karte> iterator = ablagestapel.iterator(); iterator.hasNext(); ) {
  Karte k = iterator.next();
  // ...
}
 

Reggie()

Bekanntes Mitglied
ich möchte mich nochmals für die netten und hilfreichen Kommentare und für eure Geduld bedanken. Das ist (leider) selbst in einer Anfängersektion nicht selbstverständlich. Super Community in diesem Forum. Habe ich leider schon ganz anders in anderen Java-Foren erlebt.
 

Reggie()

Bekanntes Mitglied
haltet ihr es für eine "gute" Lösung die Kartenobjekte von ArrayList zu ArrayList zu "verschieben", oder gibt es da eine noch einfachere/elegantere Lösung? Alle Kartenspiele haben ja gemeinsam, dass die Spielkarten (egal welcher Art) einzigartig sind und sich demnach auch nur gleichzeitig an nur einem "Ort" befinden können. also ich finde liste1.add(liste2.remove(index)); schon sehr elegant, weil die remove-Methode ja gleichzeitig das Element entfernt und als Rückgabewert zurückgibt.
EDIT: Alternativ könnte ich mir vorstellen nur 1 ArrayList zu nutzen, bei der jedes Element noch den aktuellen Ort als Attribut erhält
 

Joose

Top Contributor
haltet ihr es für eine "gute" Lösung die Kartenobjekte von ArrayList zu ArrayList zu "verschieben",
Die Frage ist eher ob man statt einer ArrayList vielleicht eine andere Art der Verwaltung wählen sollte/könnte.
Ein Stack (http://www.java-tutorial.org/stack.html) wäre zum Beispiel eine gute Wahl für einen Ablegestapel wo man die "unteren Karten" nur nehmen kann wenn man die "darüber" auch nimmt.
 

JStein52

Top Contributor
Natürlich kann man alles mögliche machen. Aber ich finde die Lösung mit mehreren Kartenstapeln elegant und intuitiv. Wenn du den Ort als Attribut hast musst du vermutlich an vielen Stellen alle Karten durchfieseln um die mit dem richtigen Ort zu finden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erste Schritte While do Schleife - macht nicht was sie soll Java Basics - Anfänger-Themen 7
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
J for /while Schleife Java Basics - Anfänger-Themen 5
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
S Do-While-Schleife Java Basics - Anfänger-Themen 2
S While Schleife Java Basics - Anfänger-Themen 4
S Do-While Schleife Java Basics - Anfänger-Themen 6
L String in Do-While-Schleife Abbruchkriterium Java Basics - Anfänger-Themen 1
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
B Verschachtelung von For-Schleife in While Schleife Java Basics - Anfänger-Themen 14
G while schleife Java Basics - Anfänger-Themen 11
G while schleife mit array Java Basics - Anfänger-Themen 12
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
G While schleife Java Basics - Anfänger-Themen 2
mor16Euro Erste Schritte Wie nennt man eine While oder For schleife die nie Ausgeführt wird Java Basics - Anfänger-Themen 5
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
N while Schleife wird nicht beendet, obwohl Sie hätte breaken sollen Java Basics - Anfänger-Themen 4
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
A Erste Schritte while-Schleife Java Basics - Anfänger-Themen 38
X While Do schleife funtioniert nicht Java Basics - Anfänger-Themen 5
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
J While Schleife Java Basics - Anfänger-Themen 19
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
b1ck while-Schleife Java Basics - Anfänger-Themen 10
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
kilopack15 DoWhile-Schleife als While-Schleife darstellen Java Basics - Anfänger-Themen 9
A While-Schleife funktioniert nicht! Java Basics - Anfänger-Themen 33
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
E Alphabet mit einer while Schleife ausgeben Java Basics - Anfänger-Themen 3
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
$ Multiplikations-Rechner mit while Schleife Java Basics - Anfänger-Themen 8
T Variablen Var aus While-Schleife abfragen -.-' Java Basics - Anfänger-Themen 9
snipesss Schlüsselworte While Schleife Java Basics - Anfänger-Themen 3
snipesss While Schleife Java Basics - Anfänger-Themen 6
A Do-While Schleife; int vergleich Java Basics - Anfänger-Themen 2
K For Schleife in While Schleife umwandeln Java Basics - Anfänger-Themen 5
Ste3et_C0st Dynamische While/For Schleife Java Basics - Anfänger-Themen 7
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
A While und For Schleife Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur do while- und while-Schleife Java Basics - Anfänger-Themen 4
C Do-While Schleife (Fehler bei der Klammerung?) Java Basics - Anfänger-Themen 8
C while-Schleife wird zuoft durchgeführt Java Basics - Anfänger-Themen 2
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
F Programm bricht While Schleife nicht ab Java Basics - Anfänger-Themen 4
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
C Erste Schritte Warum ist die While Schleife so schnell? Java Basics - Anfänger-Themen 5
A was wird in der while schleife gemacht Java Basics - Anfänger-Themen 3
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
Z Logikfehler do-while Schleife Java Basics - Anfänger-Themen 4
E While-Schleife Java Basics - Anfänger-Themen 6
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
A Probleme mit While Schleife Java Basics - Anfänger-Themen 10
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
B Summe aller Zahlen von 1 bis zu dieser Zahl (ohne while oder for schleife) Java Basics - Anfänger-Themen 4
LangUndBreit Erste Schritte 100% cpu auslastung (evtl unendliche while schleife?) Java Basics - Anfänger-Themen 1
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
T while Schleife Java Basics - Anfänger-Themen 22
N While Schleife Erklärung Bitte Java Basics - Anfänger-Themen 3
F Problem mit der While schleife und dem Scanner Java Basics - Anfänger-Themen 2
A do while Schleife wird 2 mal durchlaufen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben