ArrayList sortieren nach bestimmten Buchstaben in den Wörtern

C_Berg

Mitglied
Hallo Zusammen,

ich habe folgende Aufgabe zu lösen:

1. Erstelle eine Liste von Wörtern und fülle sie selbst aus. - done
2.1. alle Wörter aus der Liste entfernen, die den Buchstaben „r“ enthalten.
2.2. alle Wörter duplizieren, die den Buchstaben „l“ enthalten.
2.3. wenn ein Wort sowohl „r“ als auch „l“ enthält, dann machen wir nichts.
2.4. alle anderen Wörter unangetastet lassen.

Wie kann ich meine eingefügten Strings auf die genauen Buchstaben überprüfen und dann
diese aus der Liste löschen ?

Danke für die Hilfe!

Gruß Christopher
 
Was hast du denn bereits? Wo kommst du nicht weiter? Zeige mal deinen Code...
Hier mein Code:
ich will nun die Methode korriegieren erstellen.


public static void main(String[] args) throws Exception {
ArrayList<String> liste = new ArrayList<>();
liste.add("Rose"); // 0
liste.add("Liebe"); // 1
liste.add("Leier"); // 2
liste = korrigieren(liste);

for (String s : liste) {
System.out.println(s);
}
}

public static ArrayList<String> korrigieren(ArrayList<String> liste) {





return null;
}
}
 
Etwas schwieriger ist es aber mit der ArrayList während du über eine Liste iterierst kannst du normalerweise keine Elemente einfügen oder löschen. Das kannst du mit einer zweiten Liste oder einem Iterator lösen.
 
OK, also Index-Spielereien, ein Iterator wird sich damit schwer tun, denke ich. Man mag mich hier gerne korrigieren. Aber für mich sieht es so aus, als ob die Übung darauf abziehlt, sich mit Indizes zu beschäftigen.
Du brauchst also mal eine For-Schleife von 0 bis exklusive list.size()

In der for-Schleife, dann die 3 Bedingungen, im if -else if-else if Format, damit nie 2 angesprochen werden.
Falls Bedingung 2.3 erfüllt -> Nichts tun
Ansonsten Falls Bedingung 2.1 erfüllt -> Das aktuelle Element entfernen, Index um 1 verringern (damit beim nächsten Durchgang der gleiche Index nochmal drankommt)
Ansonsten Falls Bedingung 2.2 erfüllt -> Das aktuelle Element mit add(int,e) entweder an der gleichen Stelle oder index +1 einfügen, danach den Index um 1 erhöhen.

Die beiden Operationen verändern die Größe der Liste, deswegen stell sicher dass deine For-Schleife die aktuelle Größe der Liste verwendet und keinen zwischengespeicherten Wert.

Gehst du die Liste von hinten nach vorne durch (for (int i = list.size()-1; i >=0; i--)), ersparst du dir das Ändern der Indizes, da alles vor Index i ja gleich bleibt.
 
Also die Methodensignatur suggeriert das es eine neue Liste sein wird und da muss man sich nicht um solche Dinge kümmern. Man kann einfach List#add aufrufen.
 
Nö, s. ListIterator#add.
Ah, super 🙂 Hab mich bisher zu wenig mit Iteratoren beschäftigt.

Also die Methodensignatur suggeriert das es eine neue Liste sein wird und da muss man sich nicht um solche Dinge kümmern. Man kann einfach List#add aufrufen.

Schon, die Aufgabe suggeriert aber, dass es sich um die selbe Liste handeln muss (es wird was "aus der Liste entfernt").
Aber auch wenn die Methodensignatur so festgelegt ist, könnte es sich um was factory-ähnliches handeln. Oft hätt ich gerne, dass Collections.reverse und Collections.shuffle die Eingangsliste als Ergebnis liefern würden.
 
Zuletzt bearbeitet:

Zurück
Oben