Warum ArrayList.remove nicht funktioniert

8

Ich habe folgenden Code -

%Vor%

Aber hier gibt es mir Ausgabe -

%Vor%

Ich verstehe nicht, warum das nicht Meg entfernt, aber ich habe es mit nur einem Meg versucht, in diesem Fall funktioniert es. Und wenn ich in letzter Zeit noch ein paar Meg hinzufüge, wird die Meg nicht aus ArrayList entfernt. Warum?

    
CodeCrypt 19.10.2013, 02:19
quelle

6 Antworten

22

Wenn Sie das erste "Meg" entfernen, wird der Index i=2 . Dann wird es inkrementiert, aber da eines der "Meg" bereits entfernt ist, ist nun name.get(3) "Brain". Du hast also das zweite "Meg" nicht überprüft.

Um das Problem zu beheben. Sie können den Index dekrementieren, wenn Sie ein Element entfernen:

%Vor%     
tianz 19.10.2013, 02:22
quelle
4

Sie durchlaufen die erste Meg , und wenn diese Meg entfernt wird, werden die Array-Werte um eins verschoben.

%Vor%

Erste Meg wird entfernt, und die Schleife inkrementiert i, weil sie alles in der for-Schleife ausgeführt hat, also ist i jetzt 3 und das Array wurde modifiziert:

%Vor%

Versuchen Sie, rückwärts zu iterieren.

%Vor%     
dtgee 19.10.2013 02:26
quelle
3

Sie können name.removeAll(Arrays.asList("Meg")); verwenden, um alle "Meg"

zu entfernen

Ihr vollständiger Code wäre

%Vor%     
Prabhakaran 19.10.2013 02:32
quelle
1

Sie entfernen die ArrayList, während Sie über sie von 0 nach N iterieren. Wenn Sie also das erste Meg bei Index N entfernen, bewegt sich das nächste Meg auf den Index N, und Sie erhöhen i auf N + 1. So wird der 2. Meg nicht entfernt. Versuchen Sie, in der umgekehrten Reihenfolge (N bis 0) zu iterieren:

%Vor%     
Mark Vayngrib 19.10.2013 02:22
quelle
1

Es ist, weil, wenn i = 2 und wenn die Bedingung wahr ist, meg gelöscht wird und alle Indizes nach oben verschoben werden. Daher werde ich als nächstes auf Brain zeigen, nicht meg.

versuche das. (Verringere i um eins, wenn die Bedingung erfüllt ist)

%Vor%     
User42 19.10.2013 02:24
quelle
0

Beim Entfernen von Elementen sollten Sie keine for-Schleife verwenden. Es macht immer Probleme, wenn man eine Logik implementiert. Verwenden Sie Reverse für die Schleife für Ihr Problem und versuchen Sie immer, für jedes Problem zu verwenden.

    
Kanagaraj M 19.10.2013 02:26
quelle

Tags und Links