Vector durchsuchen und Elemente löschen

prototype0815

Aktives Mitglied
Hey folks, ich habe irgendwie ein kleines Logikproblem. Ich habe einen Vector der Elemente gespeichert hat, dessen Wert unterschiedlich steigt. Erreicht dieser Wert eine bestimmte größe soll das Element aus dem Vector gelöscht werden. Ich habe bereits zwei Lösungsansätze versucht aber ohne das richtige Ergebnis zu erhalten.

Nummer 1: Das Problem hierbei ist das ich irgenwann in einen Fehler laufe (ArrayIndex out of Bounds), weil size z.B. 120 ist und ich aber gleichzeitig Elemente aus dem Vector entferne. Dann ist der Vector nicht mehr so groß das ich mit v.get(j).wert auf ein Element zugreifen werde.
Java:
          int size = v.size();
          for (int j = 0; j < size; j++) {
            double d = v.get(j).wert;
            if ((d) >= 60.0) {
              v.remove(j);
            }
          }

Nummer 2: Hierbei wird der Vector verkleinert, und bei jedem Schleifendurchlauf wird die Größe des Vectors neu betrachtet und mit j verglichen. Dabei werden nicht alle Elemente deren Wert 60 erreicht haben aus dem Vector gelöscht. Ich vermute weil ich den Vector verkleinere und gleichzeitig mit jedem Durchlauf j erhöhe.
Java:
          for (int j = 0; j < v.size(); j++) {
            double d = v.get(j).wert;
            if ((d) >= 60.0) {
              v.remove(j);
            }
          }


Vielleicht weiss jemand Rat...

LG proto
 
Mit Iteratoren würde es z.B. so aussehen:
Java:
Iterator<Double> it = v.iterator();
while (it.hasNext()) {
	Double value = it.next();
	if (value > 60) it.remove();
}
Wichtig ist hierbei, dass du das aktuelle Element mit it.remove() entfernst und nicht manuell mit v.remove(...)
 
du kannst z.B. rückwärts durchlaufen:
Java:
for(int i=v.size()-1;i>=0; i--) {
//...
}
super Sach, das funktioniert. Vielen Dank


Hab mittleiweile aber auch noch etwas erreicht, aber diese Lösung finde ich nicht so gelungen wie deine...
Java:
          for (int j = 0; j < v.size(); ) {
            double d = v.get(j).wert;
            if ((d) >= 60.0) {
              v.remove(j);
            }
            else 
              j++;
          }
 

Neue Themen


Zurück
Oben