Remove bei ArrayList() löscht das Element nicht

timestamp

Mitglied Käsekuchen
Hallo allerseits.
Folgender Code funktioniert bei mir nicht wie gewollt. Anstatt das Element zu löschen bleibt es bestehen:
Java:
public void keyReleased(KeyEvent e){
	this.keysDown.remove(Helper.findInList(e.getKeyCode(), this.keysDown));		
}
this.keysDown ist eine ArrayList<Integer>
Helper.findInList ist eine Methode, die mir den Index eines Elementes aus einer Liste liefert.

Hier einige Debugausgaben:
debug hat gesagt.:
---Start---
KeysDown: [68] //Inhalt von KeysDown
Helper.findInList: 0 //Position die die Methode zurückgibt
Remove: false //Rückgabewert der Remove Methode
KeysDown: [68] //Inhalt von KeysDown nach dem Aufruf der Methode
---End---

---Start---
KeysDown: [68, 83, 65, 87]
Helper.findInList: 3
Remove: false
KeysDown: [68, 83, 65, 87]
---End---
 
Zuletzt bearbeitet:
Moin!
Helper.findInList ist eine Methode, die mir den Index eines Elementes aus einer Liste liefert.
Wenn du dir die Methoden der ArrayList anschaust, wirst du sehen, dass es 2 remove Methoden gibt. Eine, die du benutzten möchtest, löscht ein Objekt an einem bestimmten Index und liefert das gelöschte Object zurück.
Hier wird ein int Wert an die Methode übergeben.
Da du aber schreibst, dass die remove Methode ein boolean zurückliefert, bedeutet dies, es wird versucht, das übergebene Objekt zu löschen. 0 bzw. 3 sind aber nicht in deiner Liste vorhanden.

Übergib ihm also doch einfach das Integer Objekt(!wichtig, nicht int Wert, das würde als index interpretiert), welches gelöscht werden soll, und spar dir den Weg über den Index.

Code:
this.keysDown.remove(new Integer(e.getKeyCode()));


*gruß*
Artorius
 
Zuletzt bearbeitet:
Artorius hat das Problem und die Lösung dazu schon genannt.
Nur noch ne kleine Zusatzinfo, wieso benutzt du extra einen Helper um zu suchen? Die Klasse ArrayList hat doch die schöne Methode indexOf(Object o), sprich dein Code könnte so aussehen:
Java:
this.keysDown.remove(this.keysDown.indexOf((e.getKeyCode());
Natürlich musst du hier auch auf die oben genannte Problematik achten und evtl. explizit nen Integer-Objekt erstellen, und daher ist die oben genannte Methode doch die bessere.

Gruß
Matt
 
Hi

vielen Dank für eure Hilfe :) Ich kannte die andere Methode auch, nur habe ich der einen IntWert übergeben, und meiner Helpermethode habe ich dummerweise einen Integerwert zurückgebenlassen. Wieder was dazu gelernt, ich benutze jetzt Atorius Lösung für mein Problem :)
 
Zurück