Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch)

FrozenFireIV

Neues Mitglied
Hallo zusammen,
ich hab ein Problem bei programmieren vom Kartenspiel Arschloch. Und zwar wenn es darum geht aus der Hand eines Spielers, welche in einer Liste gespeichert ist, mehrere Karten bei denen das Attribut zahl gleich ist zu entfernen (sprich Mehrlinge legen). Ich habe dafür folgende eigentlich sehr simple und schlichte Methode WipeOutNumber(int v) programmiert:
public void wipeoutnumber.PNG
Der Plan ist des einfach zunächst diese im Anfang der Liste kleinstesBlatt im entsprechenden Spieler auszuführen und dann in der Liste in der Klasse Spielkarte zu überprüfen ob es sich um die zu entfernende Zahl v handelt und wenn nicht rekursiv weiter zusuchen. Wenn es sich dann um diese handelt gibt man auch den rekursiven Aufruf und entfernt danach this (damit es keine NullPointerExeption gibt).
Aber es passiert gar nichts, wenn ich die Methode durch eine Test-Methode in der Klasse Spiel manuell aufrufe.

Danke schonmal im voraus für jede Hilfe
LG
 
1. Methoden- und Variablennamen schreibt man in Java in lowerCamelCase
2. Der Code kann vereinfacht werden, weil im if- und else-Zweig jeweils zu Beginn das selbe gemacht wird:
Java:
public void wipeOutNumber(int v) {
    nachfolger.wipeOutNumber(v);
    if (gebeZahl() == v) {
        entferne(gebeFarbe(), gebeZahl());
    }
}
3. Wie man jetzt deutlich sieht, wird auf nachfolger ohne weitere Prüfung zugegriffen. D. h. entweder läuft das Programm ewig, weil Deine Liste einen Kreis enthält (nachfolger zeigt auf ein Element, das weiter vorne in der Liste steht) oder aber Du erhältst eine NullPointerException, weil nachfolger irgendwann null ist.
4. Ich gehe mal davon aus, dass die Rekursion enden soll, wenn nachfolger==null gilt:
Java:
public void wipeOutNumber(int v) {
    if (nachfolger != null) {
        nachfolger.wipeOutNumber(v);
    }
    if (gebeZahl() == v) {
        entferne(gebeFarbe(), gebeZahl());
    }
}
5. Wie sieht entferne() aus?
 

Zurück
Oben