Wie kann ich eine Array List von einer methode einer anderen übergeben?
Wie würdet ihr diese Aufgabe lösen? ICh habe Probleme mit dem addFile und listFile
Erstellen Sie eine Klasse Ordner. Sie soll ein Attribut Name haben und Dateien aufnehmen können. Ein Ordner kann keine bis beliebig viele Dateien enthalten.
Die Klasse Ordner soll folgende Methoden haben:
• Getter- und Setter- Methoden für das Attribut Name
• addFile(Datei): fügt eine Datei dem Ordner hinzu
• listFiles(): gibt alle Dateien als ArrayList zurück (entspricht Getter)
• printFiles(): gibt die Liste der Dateien aus, die in diesem Ordner enthalten sind
• getSize(): gibt die Gesamtgrösse aller Dateien in diesem Ordner aus
• getFiles(typ): gibt eine ArrayListe mit allen Dateien eines bestimmten Typs aus
• getFile(name): soll eine Datei mit dem entsprechenden Namen zurückgeben
2 Antworten
Ich verstehe die Frage irgendwie nicht. Im Ordner-Objekt erstellst du einfach eine ArrayList, wo du alle Dateien drin speicherst, die in dem Ordner liegen. Bei addFile fügst du der Liste eine Datei hinzu und bei listFiles gibst du eine Kopie der Liste zurück.
import java.io.FileNotFoundException;
import java.util.ArrayList;
public class Ordner {
private String name;
private ArrayList<Datei> dateien = new ArrayList<>();
public Ordner (String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addFile(Datei file) {
dateien.add(file);
}
public ArrayList<Datei> getFiles() {
// Wichtig: Nicht die Dateienliste selbst zurückgeben, weil man sie sonst ungeprüft verändern kann
return new ArrayList<>(dateien);
}
public void printFiles() {
for (Datei datei: dateien) {
System.out.println(datei.getName());
}
}
public long getSize() {
return dateien
.stream()
.mapToLong(Datei::getSize)
.sum();
}
public ArrayList<Datei> getFiles(String typ) {
return new ArrayList<>(
dateien
.stream()
.filter(datei -> datei.getTyp().equals(typ))
.toList()
);
}
public Datei getFile(String name) throws FileNotFoundException {
return dateien
.stream()
.filter(datei -> datei.getName().equals(name))
.findAny()
.orElseThrow(()-> new FileNotFoundException("Die Datei \"" + name + "\" wurde in diesem Ordner nicht gefunden."));
}
}
Du kannst es direkt im Konstruktor übergeben oder eine Setter-Methode dafür machen.
Wo das Array herkommt, ist dabei völlig egal, solange es vom Typ her das richtige ist.