2010-12-24 4 views
15

Dies ist Teil meines Codes.Java ArrayList.remove() Problem

Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); 
someArrayList.remove(keyLocation); 

Also, was ich hier tue, ist ich keyLocation (das erste Vorkommen eines Strings in der reducedFD Arraylist) zuweisen. Aber wenn ich das Objekt mit diesem keyLocation aus einer ArrayList entfernen möchte, wird es nicht funktionieren. manuell

Wenn ich Eingang:

someArrayList.remove(0); //Let's say 0 is the actual keyLocation 

Das tatsächlich funktioniert.

Was seltsam ist, dass auch folgende Code funktioniert:

someArrayList.remove(keyLocation + 1); 

Irgendwelche Hinweise?

Hier ist die Hauptschleife:

for (int KEYindex = 0; KEYindex < KeyPlus.size(); KEYindex++){ 

Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); 

if (reducedFD.contains(KeyPlus.get(KEYindex))){ 

KeyPlus.add(reducedFD.get(keyLocation+1)); 
CheckedAttributesPlus.add(KeyPlus.get(KEYindex)); 
reducedFD.remove(keyLocation); 

} 
} 
+1

was meinst du mit „es wird nicht funktionieren“?Computer startet neu, nehme ich an? –

+1

Mit "es wird nicht funktionieren", ich meine, es entfernt es überhaupt nicht. Es ignoriert es. – user461316

+0

Kannst du deinen Code ein wenig detaillierter schreiben? Ein bisschen mehr Code .. – pringlesinn

Antwort

64

Das Problem ist, dass Sie einen Integer zum Entfernen Methode sind vorbei, und nicht ein int. Wenn Sie eine Ganzzahl übergeben, wird davon ausgegangen, dass die Ganzzahl selbst das ist, was Sie entfernen möchten, und nicht den Wert in diesem Index. Vergleichen Sie die Methoden

remove(Object o) 
remove(int i) 

so tun:

int keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); 
someArrayList.remove(keyLocation); 
+4

Das flog direkt über meinen Kopf. Danke vielmals. – user461316

+0

Ich war auf diesem für mehr als eine Stunde fest .. Danke, dude ... :) – LPD

+1

Danke für diese, so einfach, aber so dumm Fehler :) – test

1
int keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); //Use a primitive int 
    someArrayList.remove(keyLocation); 
3

Die List Schnittstelle hat zwei remove() Verfahren, eine, die eine Object empfängt (und versucht, dieses Objekt aus der Liste zu entfernen) und eine andere, empfängt ein int (und versucht, das Objekt zu entfernen, dessen Index das angegebene int ist).

Normalerweise führt die Angabe einer Methode zu einem Integer Parameter zu einem automatischen Unboxing oder einer automatischen Transformation zu einem Primitiv int. In diesem Fall versucht der Compiler nicht automatisch zu debuggen, da es dort eine vollkommen gute Methode gibt, die Object und Integer instanceof Object empfängt ... Ich nehme an, Ihre Liste ist nicht List<Integer>, weshalb sie spektakulär fehlschlägt.

Hinzufügen ein int zu Ihren Integer Kräften Auto-Unboxing und die Additionsergebnisse in einem int - perfekt für die anderen remove() Verfahren. Hier

12

ist kurze Beschreibung:

remove(Object o) // remove object 
remove(int index) // remove the object in that index 

, wenn Sie schreiben .remove(5) Compiler sie als primitive Art versteht so als Index und entfernen index(5). Wenn Sie Objekt entfernen möchten, sollten Sie schreiben .remove(new Integer(5))

+0

danke viel, netter Trick;) – Q8Y

+0

neue Integer() funktionierte perfekt für mich, thx! – Zakhar

+0

es funktioniert auch für mich danke! – kojh

0

Oder Sie könnten einfach tun:

someArrayList.remove(keyLocation + 0); 
0

Sie ca n dieser Aufruf stattdessen eine der Schaffung int

someArrayList.remove(integerKeyLocation.intValue());