Durch ArrayList laufen

Kazbah

Mitglied
Problemstellung:

Es handelt sich hierbei das Spiel: Hooptoss zu programmieren. Ich hab soweit alles fertig allerdings komm ich bei einem Problem nicht vorran. Um es euch etwas leichter zu machen, ist hier drunter ein Screen vom Spiel.

Hooptoss Screenshot

Die Stäbe (Pegs) unten bewegen sich hin un her.
Mit der Maus lege ich die Position des Kreises (oben) fest.
Sobald ich nun auf die Maus klicke fällt dieser runter. Ist er auf der gleichen Höhe wie die Stäbe wir ermittelt ob sich ein Stab im Kreis befindet. Falls ja, soll sich dieser löschen, der Score geht rauf und man fängt wieder oben an. Falls nicht get der Score runter und man fängt wieder oben an.

Problem:

Mir gelingt es immer nur die Position des letzen Stabes zu speichern. Dh der Stab wird nur gelöscht fals es der letze in der Liste ist.

Hier der Code:

Java:
public void doStep(int width, int height) {
          if (ring.isFalling()) {
            ring.setY(ring.getY() + ring.getSpeed());
        }
        for (int i = pegs.size()-1;i>=0;i--) {
            Peg peg = pegs.get(i);
            // if peg touches the left side it will be placed on the right side
            if (peg.getX() + peg.getSpeed() <= 0) {                 peg.setX(width);        }
            // if peg tocuhes the right side it will be placed on the left side
            if (peg.getX() + peg.getSpeed() >= width) {           peg.setX(0);              }
            // peg moving
            peg.setX(peg.getX() + peg.getSpeed());
                
                int ringLeft = ring.getX() - ring.getWidth() / 2;
                int ringRight = ringLeft + ring.getWidth();
                int pegLeft = peg.getX() - peg.getWidth() / 2;
                int pegRight = pegLeft + peg.getWidth();
                int ringBottom = ring.getY() + ring.getWidth() / 2;
                int pegTop = peg.getY();

                if (ringBottom >= pegTop) {
                    //      (                   |                   |                  )
                    if (ringLeft <= pegLeft && pegRight <= ringRight) {
                        score += 2 * peg.getWidth();
                        pegs.remove(peg);
                        ring.setFalling(false);
                        ring.setY(8);
                    } else {
                        score -= 10;
                        ring.setFalling(false);
                        ring.setY(8);
                   }
                }

        }
      

    }
 

fLooojava

Bekanntes Mitglied
Ich bin mir nicht sicher, aber auf den ersten Blick:

Du erstellst hier doch ein Objekt mit dem Parameter "pegs.size()-1" - sprich mit dem Letzten Eintrag in deiner Arraylist.
Java:
 for (int i = pegs.size()-1;i>=0;i--) {
Peg peg = pegs.get(i);
// other code
 }


Und diesen entfernst du dann:
Java:
pegs.remove(peg);

d.h es wird immer nur der Letzte Eintrag in deiner Array List gelöscht oder liege ich hier falsch?

Ich bin aufjedenfall gespannt was andere dazu meinen, die Idee ist lässig! :idea:

flo
 
Zuletzt bearbeitet:

Kazbah

Mitglied
Ich bin mir nicht sicher, aber auf den ersten Blick:

Du erstellst hier doch ein Objekt mit dem Parameter "pegs.size()-1" - sprich mit dem Letzten Eintrag in deiner Arraylist.
Java:
 for (int i = pegs.size()-1;i>=0;i--) {
Peg peg = pegs.get(i);
// other code
 }

Nein mein Objekt wurde bereits in einer andern Methode erstellt. Hier lauf ich nur von hinten nach vorne einmal ganz durch und ändere immer die Position der Stäbe. :)
 

Phash

Top Contributor
als erstes:
über eine ArrayList kann man mit foreach gehen:

Java:
for (Peg element: pegs){pegs.doSomething()...}

2. wenn du eine Collection manipulieren willst, über die du gerade drüber iterierst, dann wirst du eine Exception fangen, dass du die aktuelle Collection nicht verändern darfst.
Dafür nimmt man dann einen Iterator -> Java Iterator googlen, fertig.

Leider schreibst du nicht, wie sich der Fehler äussert. Wo genau fällt dir das auf? Wie oft wird deine Schleife durchlaufen? Was sagt der debugger, wenn du in deinen Bool-Vergleich schaust?
 

Kazbah

Mitglied
Mit for each tritt ein CurrentModification-Error auf und das ist auch der Grund warum ich rückwärts durch die Liste laufe.
Ich bekomm auch keine Fehler angezeigt.
Es ist so, dass ich ein Timer habe der dauernd diese Methode aufruft, sodass die Stäbe halt dauernd einen "Step" machen. Thoretisch fängt er beim letzen Stab an, der bewegt sich dann und dabei wird auch noch kontrolliert ob er sich im Kreis befindet. Dann kommt der 2t letze in der Liste und da müsste eigentlich das gleiche passieren. Allerdings wenn ich die Position unten printe lasse ist sie nochimmer die des letzen Stabes.
Das Problem ist eigentlich, dass er nicht dauernd alle Positionen kontrolliert, sondern nur die des letzen Stabes. Dh immer nur der letze Stab kann gelöscht werden.
 

Phash

Top Contributor
wegen der CurrentModificationException schrieb ich Punkt 2: Iterator.


wie groß ist denn pegs? (mach ein System.out.println(pegs.size()); vor der for-Schleife)

und gib mal vor Zeile 23 die Werte dieser Variablen aus:
ringLeft pegLeft pegRight ringRight
 

SilverClaw

Aktives Mitglied
Mit for each tritt ein CurrentModification-Error auf und das ist auch der Grund warum ich rückwärts durch die Liste laufe.

Na Klasse...e ist ja nicht so, dass es das bloß machen würde, um dich zu ärgern. Indem du das umgehst lädsts du Fehler ja geradezu ein, z.B. wenn sich die Länge deine rListe zwischendurch ändert, während durchgelaufen wird. Dann überlege doch besser mal, wie du e hinbekommst, dass die Exception nicht geworfen werden muss.
 

fischefr

Aktives Mitglied
Ich gehe sogar noch einen (entscheidenden) Schritt weiter:

LISTITERATOR


.. damit darf man dann auch die Liste während der Iteration (allerdings nur über iterator-Methoden) verändern.

;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
K ArrayList durch ArrayList ersetzen Java Basics - Anfänger-Themen 5
M ArrayList durch OutputStream in Datei Java Basics - Anfänger-Themen 9
G Line Separator in ArrayList durch ";" ersetzen Java Basics - Anfänger-Themen 4
A ArrayList-iteration mit Prüfung auf instanceof durch switch case? Java Basics - Anfänger-Themen 13
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
obiwanke Ziffern durch ASCII Character ersetzen Java Basics - Anfänger-Themen 8
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
F Methode für Teilbarkeit durch 5 tut was anderes.... Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
H Wie kann ich durch Methoden definiren? Java Basics - Anfänger-Themen 8
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
O Typparameter durch Wildcards verallgemeinern Java Basics - Anfänger-Themen 3
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
F Ein Datum (int) durch Methode als String formatieren Java Basics - Anfänger-Themen 2
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
R Eine Schleife durch eine Methode schließen? Java Basics - Anfänger-Themen 4
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
S For-Schleife durch "ESC" verlassen? Java Basics - Anfänger-Themen 2
C char in String suchen und durch anderen String ersetzen Java Basics - Anfänger-Themen 2
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
V Durch 0 teilen Java Basics - Anfänger-Themen 2
V Durch Methode Objekt löschen Java Basics - Anfänger-Themen 2
D Klasse durch eine Schleife wiederholen Java Basics - Anfänger-Themen 1
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Objektname durch Tastaturbefehl eingeben Java Basics - Anfänger-Themen 7
G Objektübergabe durch Parameter Java Basics - Anfänger-Themen 3
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
T Threads Durch threads gestartete Prozesse killen Java Basics - Anfänger-Themen 2
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
F Erste Schritte Hausaufgaben-Prob. - Iterative Prog. Zahlen aufsummieren, wenn durch k>0 teilbar. Java Basics - Anfänger-Themen 5
T Input/Output Programm beenden durch Eingabe Java Basics - Anfänger-Themen 1
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
Ponychan95 Erste Schritte Switch fällt immer bis zum default durch Java Basics - Anfänger-Themen 4
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
N Durch Objekte iterieren? Java Basics - Anfänger-Themen 3
J Durch 2-Dimensionales Array "bewegen" will nicht so recht hinhauen Java Basics - Anfänger-Themen 2
B Durch eine Liste von Strings laufen Java Basics - Anfänger-Themen 6
D javacode durch Html ausfuehren Java Basics - Anfänger-Themen 13
X Erste Schritte Lernen durch Videoreihe Java Basics - Anfänger-Themen 35
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
H Text durch Checkbox erscheinen lassen Java Basics - Anfänger-Themen 2
J Datensätze aus Txt Datei auslesen - Datensätze durch stöbern Java Basics - Anfänger-Themen 5
Ananaskirsche Input/Output Platzhalter durch String in yml-Datein ersetzen Java Basics - Anfänger-Themen 5
F Speicherlast mehrere GB durch kleine png files? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben