Remove bei ArrayList funktioniert nicht

Taso44

Aktives Mitglied
Hallo Zusammen,
ich programmiere gerade eine Studentenverwaltung. In dieser erstelle, speichere, update... ich halt Studenten.
Das ganze in Verbindung mit einer CSV-Datei.
Beim Erstellen und speichern in die CSV-Datei eines Studenten funktioniert alles, jedoch kann ich diese nicht mehr aus der Liste löschen.
Also remove funktioniert da nicht. Ich denke es liegt irgendwo in der Logik, aber ich kann keinen Fehler entdecken. Vielleicht seht ihr ja woran es liegt.

Java:
//PrintWriter Mehtode 
    public void schreibeInListe() {
        String fileName = "resource/Studentenverwaltungdokument.csv";
        writer = null;
        try {
            writer = new PrintWriter(new FileOutputStream(new File(fileName),true));
            } catch (FileNotFoundException e ) {
                e.printStackTrace();
            }
        writer.print(liste);
        writer.println(); //Zeilenumbruch

        writer.flush();
        writer.close();
        

    }
        


        //Create     
    public void studentErzeugen( ) { 
        
        String name;
        String vorname;
        int matrikelnummer;
        String studiengang;
        int semesterzahl;
        String gebDatum;
        
        System.out.println("Name: "); 
        name = linescan.nextLine();
        
        System.out.println("Vorname: ");
        vorname= linescan.nextLine();
        
        System.out.println("Matrikelnummer: ");
        matrikelnummer = numberscan.nextInt();
        
        System.out.println("Studiengang: ");
        studiengang = linescan.nextLine();
        
        System.out.println("Semesterzahl: ");
        semesterzahl = numberscan.nextInt();
        
        System.out.println("Geboren am: ");
        gebDatum = linescan.nextLine();
        
        Student studie = new Student(name, vorname, matrikelnummer, studiengang, semesterzahl, gebDatum);
        
            liste.add(studie);
            

            schreibeInListe();
            
            

                    }
                
        //Delete
        public void löscheStudent() {
            System.out.println("Geben Sie die Matrikelnummer des Studenten ein: ");
            int matrikelnummerDesStudenten = numberscan.nextInt();
            
            for (int i = 0; i < liste.size(); i++) {
                if(liste.get(i).getMatrikelnummer() == matrikelnummerDesStudenten) {  // sucht den Studenten in der Liste
                    liste.remove(i); // entfernt den Studenten aus der Liste (Verwaltung)
                }

            }
            
            schreibeInListe();
            

        }


Die Schleife in der Methode, die die Studenten aus der Liste löschen soll und dann eben auch aus der CSV-Datei nutzt die
Matrikelnummer, weil diese eindeutig ist und nicht verändert werden kann.

Danke schonmal für euren Input
 
Was heißt "Funktioniert nicht"?

In der Datei kann die nicht gelöscht werden, da du in die Datei immer nur mit append schreibst, wenn du die in der Datei entfernen willst, muss die komplette Liste ohne Append neu schreiben.
 
Du kriegst hier ein Problem mit den Indizes.
Wenn du das Element (i) löschst und dann i um 1 erhöhst, überspringst du eines.
Das ist zwar nicht von Belang, wenn alle Einträge garantiert eine andere Nummer haben (In dem Fall solltest du die Suche auch per break; abbrechen, wenn du den passenden Datensatz gefunden hast), aber trotzdem ...

Du musst entweder nach dem Löschen i um 1 reduzieren, oder - die elegantere Methode - rückwärts zählen, um auch wirklich alle zu erwischen, auf die die Bedingung zutrifft.
Java:
for (int i = list.size()-1; i >=0; i--) {
    if(liste.get(i).getMatrikelnummer() == matrikelnummerDesStudenten) {  // sucht den Studenten in der Liste
        liste.remove(i); // entfernt den Studenten aus der Liste (Verwaltung)
    }
}
Eine weitere Möglichkeit ist die removeIf Methode.
Java:
    liste.removeIf(e -> e.getMatrikelnummer() == matrikelnummerDesStudenten);
 

Neue Themen


Zurück
Oben