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?
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% Sie durchlaufen die erste Meg
, und wenn diese Meg
entfernt wird, werden die Array-Werte um eins verschoben.
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:
Versuchen Sie, rückwärts zu iterieren.
%Vor% Sie können name.removeAll(Arrays.asList("Meg"));
verwenden, um alle "Meg"
Ihr vollständiger Code wäre
%Vor%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%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.