• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Problem mit einer Methode die gewissen Inhalt einer Array löschen soll

J

Juicerz

Mitglied
Hallo zusammen,

Ich habe ein kleine Frage und zwar versuche ich die Methode getAllBooks zum laufen zu bringen, aber irgendwie klappt das nicht.

Die Methode getAllBooks soll eine Liste mit allen Objekten vom Enum-Typ Buch aus dem Array readingList zurückgeben... alle anderen entfernen war mein Ansatz.

Hoffe ihr könnt mir helfen... irgendwie stell ich mich gerade blöde an.

Lg
 

Anhänge

  • Screenshot 2021-01-26 235141.jpg
    Screenshot 2021-01-26 235141.jpg
    49,6 KB · Aufrufe: 30
J

Juicerz

Mitglied
Java:
public class ReadingList {
    
    private ArrayList<ReadingMaterial> readingList;
    
    public ReadingList() {
        this.readingList = new ArrayList<ReadingMaterial>();
    }
    
    public void addMaterial(ReadingMaterial readingMaterial) {
        this.readingList.add(readingMaterial);
        Collections.sort(readingList);
    }
    
    public ArrayList<ReadingMaterial> getAllBooks(){
        Bookware search = Bookware.valueOf("Book");
        for (int i = 0; i < readingList.size(); i++) {
            if (readingList.get(i).equals(search)) {
                readingList.remove(i);
            }
        }
        return readingList;
    }
    
    public String toString() {
        String readingListString = "***INHALT***\n";
        for (ReadingMaterial z : this.readingList) {
            if(z != null) {
                readingListString += z + "\n";
            }
        }
        return readingListString;
    }

}
 
D

DrPils

Bekanntes Mitglied
In deiner Arraylist sind Objekte vom Typ ReadingMaterial.
Dein Enum ist vom Typ Bookware
Du vergleichst nun ReadingMaterial mit Bookware.
Der vergleich gibt nie true zurück, dementsprechend wird nichts aus deiner Arraylist entfernt.

Wenn ich deinen Code richtig interpretiere würdest du sowieso die gewünschten Bücher entfernen.
Du solltest dir überlegen ob es evtl besser wäre eine neue Liste mit den gewünschten Büchern zurückzugeben.
 
J

Juicerz

Mitglied
Ich habe mir in der Klasse ReadingMaterial eine Methode geschrieben:
Enum-Klasse heisst neu Type.

Java:
    public boolean isType(Type type) {
        if (this.type == type) {
            return true; 
        } else {
            return false;
        }
    }

Ich dachte, ich benutze die Methode um das Problem zu lösen, aber jetzt kann ich meine Idee selber nicht zu Ende bringen. Kann mir einer helfen? xD

Die Methode getAllBooks soll eine Liste mit allen Objekten vom Typ Buch (Enum-Klasse Type) aus der ArrayList readingList zurückgeben. Jetzt kam ich auf die Idee eine Methode zu schreiben, die den Typ vergleicht, aber wie kann ich die jetzt hier genau anwenden...

Mein letzter Kläglicher Versuch die Methode zu schreiben:
Java:
    public ArrayList<Type> getAllBooks() {
        ArrayList<Type> books = new ArrayList<Type>();
        String search = "Buch";  
        for (int i = 0; i < readingList.size(); i++) {
            if (readingList.get(i).equals(search)) {
                books.add(readingList.get(i));
            }
        }
        return books;
    }

Enum-Klasse:
Java:
public enum Type {
    
    Buch,
    Magazin;

}

Klasse ReadingMaterial:
Java:
public class ReadingMaterial implements Comparable {
    
    private String name;
    private int pages;
    private Type type;
    
    public ReadingMaterial(String name, int pages, String type) {
        this.name = name;
        this.pages = pages;
        this.type = Type.valueOf(type);
    }
    
    public int getPages() {
        return this.pages;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String toString() {
        String readingmaterialString = this.pages + " " + this.name + " " + this.type;
        return readingmaterialString;
    }

    public int compareTo(ReadingMaterial other) {
        if (this.pages == other.pages) {
            return 0;
        } else if (this.pages > other.pages) {
            return 1;
        } else {
            return -1;
        }
    }
    
    public boolean isType(Type type) {
        if (this.type == type) {
            return true;   
        } else {
            return false;
        }
    }
    
}

Klasse ReadingList:
Java:
public class ReadingList {
    
    private ArrayList<ReadingMaterial> readingList;
    
    public ReadingList() {
        this.readingList = new ArrayList<ReadingMaterial>();
    }
    
    public void addMaterial(ReadingMaterial material) {
        readingList.add(material);
        Collections.sort(readingList);
    }
    
//    public ArrayList<Type> getAllBooks() {
//        ArrayList<Type> books = new ArrayList<Type>();
//        String search = "Buch";   
//        for (int i = 0; i < readingList.size(); i++) {
//            if (readingList.get(i).equals(search)) {
//                books.add(readingList.get(i));
//            }
//        }
//        return books;
//    }
    

}
 
Flown

Flown

Administrator
Mitarbeiter
Nebenbei: Man programmiert immer gegen Interfaces (man entkoppelt sich von der Implementierung: ArrayList -> List.

Du bist schon fast am Ziel. Deine ReadingMaterial besitzt doch schon eine Abfrage auf den richtigen Typ:

Java:
public List<ReadingMaterial> getAllBooks() {
  List<ReadingMaterial> books = new ArrayList<>();
  for (ReadingMaterial material : readingMaterials) {
    if (material.isType(Type.Buch)) {
      books.add(material);
    }
  }
  return books;
}

Außerdem
- laut Conventions sind Enums immer capitalized i.e. BUCH und MAGAZIN.
- anstatt jedes Mal die Liste beim einfügen zu sortieren, gleich das Element sortiert einfügen
- Comparable mit den richtigen Generics ausfüllen: Comparable<ReadingMaterial>
- Unnötige Variablen und Tautologien vermeiden (e.g. public boolean isType(Type type) { return this.type == type; } reicht völlig, auch das compareTo könnte man mit return Integer.compare(this.pages, other.pages); vereinfachen)
-
 
J

Juicerz

Mitglied
Nebenbei: Man programmiert immer gegen Interfaces (man entkoppelt sich von der Implementierung: ArrayList -> List.

Du bist schon fast am Ziel. Deine ReadingMaterial besitzt doch schon eine Abfrage auf den richtigen Typ:

Java:
public List<ReadingMaterial> getAllBooks() {
  List<ReadingMaterial> books = new ArrayList<>();
  for (ReadingMaterial material : readingMaterials) {
    if (material.isType(Type.Buch)) {
      books.add(material);
    }
  }
  return books;
}

Außerdem
- laut Conventions sind Enums immer capitalized i.e. BUCH und MAGAZIN.
- anstatt jedes Mal die Liste beim einfügen zu sortieren, gleich das Element sortiert einfügen
- Comparable mit den richtigen Generics ausfüllen: Comparable<ReadingMaterial>
- Unnötige Variablen und Tautologien vermeiden (e.g. public boolean isType(Type type) { return this.type == type; } reicht völlig, auch das compareTo könnte man mit return Integer.compare(this.pages, other.pages); vereinfachen)
-
- Man programmiert immer gegen Interfaces (man entkoppelt sich von der Implementierung: ArrayList -> List.
Das musst du mir genauer erklären... Sorry. :)

- laut Conventions sind Enums immer capitalized i.e. BUCH und MAGAZIN.
Danke für den Hinweis!

- Comparable mit den richtigen Generics ausfüllen: Comparable<ReadingMaterial>
Hab ich gerade vorhin gecheckt, deshalb haben die Schnittstellen immer Stress gemacht und wollten immer NOCH eine compareTo hinzufügen, haha.

- Unnötige Variablen und Tautologien vermeiden (e.g. public boolean isType(Type type) { return this.type == type; } reicht völlig, auch das compareTo könnte man mit return Integer.compare(this.pages, other.pages); vereinfachen)
Möglichst wenig QuellCode und wenig Verwirrung, wa.

Java:
    public ArrayList<ReadingMaterial> getAllBooks() {
        ArrayList<ReadingMaterial> books = new ArrayList<ReadingMaterial>();
        for (ReadingMaterial z : readingList) {
            if (z.isType(Type.BUCH)) {
                books.add(z);
            }
        }
        return books;
    }
 
Flown

Flown

Administrator
Mitarbeiter
- Man programmiert immer gegen Interfaces (man entkoppelt sich von der Implementierung: ArrayList -> List.
Das musst du mir genauer erklären... Sorry. :)
Es gibt mehrere Implementierungen von dem Interface List (siehe: All Known Implementing Classes).

Nehmen wir jetzt mal deine Methode würde so aussehen:
Java:
public List<ReadingMaterial> getAllBooks() {....}

Dann würden die Klassen/Clients die deine Klasse/Methode verwenden sozusagen mit dem Vertrag/Contract des Interfaces arbeiten (die Methoden sind garantiert implementiert).

Du verwendest in deiner Methode: List<ReadingMaterial> books = new ArrayList<>(); die ArrayList als Implementierungsdetail. Das kann aber deinen Clients/Nutzer der Methode aber sehr egal sein was die Ausprägung (Implementierung) des Interfaces List ist.

Weiters angenommen, kommt eine neue Implementierung einer List die 1000 mal schneller ist als eine ArrayList in die JDK, dann möchtest du die auch verwenden und austauschen.
Da du jetzt einfach in deinem Code List<ReadingMaterial> books = new AwesomeList<>(); änderst hat sich an der Methodensignatur nichts geändert und deine Clients (verwender deiner Methode) müssen nicht den Code ändern, weil sich nur das Detail geändert hat.
Gibst du aber eine ArrayList in deiner Methodensignatur an, dann müsstest du es gegen AwesomeList austauschen und alle deine Clients müssten auch deren Code ändern (-> das ist der Hauptgrund - eine kleine Änderung sollte keine Flut an changes triggern).
 
J

Juicerz

Mitglied
Es gibt mehrere Implementierungen von dem Interface List (siehe: All Known Implementing Classes).

Nehmen wir jetzt mal deine Methode würde so aussehen:
Java:
public List<ReadingMaterial> getAllBooks() {....}

Dann würden die Klassen/Clients die deine Klasse/Methode verwenden sozusagen mit dem Vertrag/Contract des Interfaces arbeiten (die Methoden sind garantiert implementiert).

Du verwendest in deiner Methode: List<ReadingMaterial> books = new ArrayList<>(); die ArrayList als Implementierungsdetail. Das kann aber deinen Clients/Nutzer der Methode aber sehr egal sein was die Ausprägung (Implementierung) des Interfaces List ist.

Weiters angenommen, kommt eine neue Implementierung einer List die 1000 mal schneller ist als eine ArrayList in die JDK, dann möchtest du die auch verwenden und austauschen.
Da du jetzt einfach in deinem Code List<ReadingMaterial> books = new AwesomeList<>(); änderst hat sich an der Methodensignatur nichts geändert und deine Clients (verwender deiner Methode) müssen nicht den Code ändern, weil sich nur das Detail geändert hat.
Gibst du aber eine ArrayList in deiner Methodensignatur an, dann müsstest du es gegen AwesomeList austauschen und alle deine Clients müssten auch deren Code ändern (-> das ist der Hauptgrund - eine kleine Änderung sollte keine Flut an changes triggern).

Sehr interessant, wurde mir so nie gelehrt. Auch das mit den Enum hab ich gerade nachgeschaut, in den Büchern klein geschrieben. Da muss man sich schon ein wenig wundern... Danke!
 
J

Juicerz

Mitglied
Könnte man eigentlich ein Enum-Type auch direkt als Instanzvariable bestimmen? Quasi den kompletten Konstruktor, etc. umgehen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
P Problem mit dem Auslesen einer Varible/Methode Java Basics - Anfänger-Themen 8
F Problem bei eshop -> Ausführen einer Methode über eine Shopverwaltung Java Basics - Anfänger-Themen 6
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
B Problem bei dem erstellen einer Main Methode Java Basics - Anfänger-Themen 4
O Methode - Problem mit Subtraktion in einer while-Schleife Java Basics - Anfänger-Themen 2
T Problem beim Returnwert einer Methode Java Basics - Anfänger-Themen 12
D Problem bei einer Rekursiven Methode Java Basics - Anfänger-Themen 2
M Problem beim Aufruf einer Methode: Wo is der Fehler? Java Basics - Anfänger-Themen 12
B Problem mit einer static void Methode Java Basics - Anfänger-Themen 8
megachucky Kleines Problem mit dem "return" einer Methode. Java Basics - Anfänger-Themen 11
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
W Problem mit dem Aufruf einer Methode Java Basics - Anfänger-Themen 2
G Problem mit einer Methode Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
D Break Sprungmarken Problem einer While True in While True Java Basics - Anfänger-Themen 6
J String Problem kann das einer erklären Java Basics - Anfänger-Themen 13
J Erste Schritte Problem mit einer bool-Variable in einem Bot-Programm Java Basics - Anfänger-Themen 1
B Problem beim Angeben einer Eingabe Java Basics - Anfänger-Themen 12
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
E Problem mit Arrays bei Benutzung einer GUI Java Basics - Anfänger-Themen 3
Z Problem beim Lesen und Schreiben einer Datei Java Basics - Anfänger-Themen 10
T Problem bei einer Flugbahnberechnung. Java Basics - Anfänger-Themen 8
J Variablen Problem beim einlesen einer Zahl Java Basics - Anfänger-Themen 7
Killerjo96 Erste Schritte Problem mit dem Sichern einer If Schleife Java Basics - Anfänger-Themen 5
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
B Problem beim Abspielen einer Videodatei Java Basics - Anfänger-Themen 4
M Problem bei einer Java-Aufgabe (Fakultäten) Java Basics - Anfänger-Themen 5
B Problem mit double in einer Funktion Java Basics - Anfänger-Themen 4
V Problem mit einer While Schleife Java Basics - Anfänger-Themen 8
C Problem mit Überprüfen einer Eingabe Java Basics - Anfänger-Themen 5
P Problem mit: Vererbung , ADT und einer Funktion Java Basics - Anfänger-Themen 10
F Problem mit einer Schleife Java Basics - Anfänger-Themen 10
J Problem beim Löschen von elementen aus einer ArrayList Java Basics - Anfänger-Themen 5
M line.separator: Problem beim Lesen einer Datei Java Basics - Anfänger-Themen 11
calzone Problem einer Gleichung mit Modulo Java Basics - Anfänger-Themen 5
T problem mit einer typ zeile Java Basics - Anfänger-Themen 8
G Problem beim Sortieren einer Liste Java Basics - Anfänger-Themen 20
JeromeM90 Problem bei einer Ausgabe von einem bestimmten Zeichen Java Basics - Anfänger-Themen 5
N Problem beim Durchsuchen einer LinkedList Java Basics - Anfänger-Themen 5
X Problem: Erben von einer abstrakten Klasse Java Basics - Anfänger-Themen 4
T Problem mit Implementierung von einer HashMap aufgabe Java Basics - Anfänger-Themen 2
K Ausgabe problem in einer Hausaufgabe Java Basics - Anfänger-Themen 5
D Problem bei einer Formel (Bin Java Neuling) Java Basics - Anfänger-Themen 3
F Problem mit auführen einer .bat Datei aus Java heraus Java Basics - Anfänger-Themen 24
M Problem beim Löschen des ersten Eintrags einer TreeSet Java Basics - Anfänger-Themen 3
H Problem beim Einlesen einer Datei (Endlosschleife ?) Java Basics - Anfänger-Themen 3
G problem beim überschreiben einer funktion Java Basics - Anfänger-Themen 2
A Problem mit Ausgabe einer Liste über einen Client Java Basics - Anfänger-Themen 5
T Problem beim Einlesen einer Datei Java Basics - Anfänger-Themen 3
T Problem mit einer Klasse Java Basics - Anfänger-Themen 3
S Problem beim löschen einer Zeile aus einer Tabelle Java Basics - Anfänger-Themen 4
W Problem mit jar erstellung bei einer SWT-Applikation Java Basics - Anfänger-Themen 5
L Merkwürdiges Problem beim Speichern und Öffnen einer Datei Java Basics - Anfänger-Themen 3
B Problem beim einlesen einer Textdatei Java Basics - Anfänger-Themen 3
G Problem bei der Angabe von Attributen in einer Objekt-Klasse Java Basics - Anfänger-Themen 3
G Problem beim erstellen einer .jar Datei Java Basics - Anfänger-Themen 9
L Aktual.problem einer Var. wenn ComboBox Element ausgewählt Java Basics - Anfänger-Themen 4
M Problem mit Exceptionausgabe in einer Logfile. Java Basics - Anfänger-Themen 3
G Problem (oder Verständnisporblem) bei einer static method Java Basics - Anfänger-Themen 9
G Problem mit einer ganz einfachen Funktion Java Basics - Anfänger-Themen 8
megachucky kleines problem mit einer nullpointer exception Java Basics - Anfänger-Themen 2
M Problem mit einer List Java Basics - Anfänger-Themen 5
K Problem beim Auslesen einer Datei Java Basics - Anfänger-Themen 6
T Problem mit einer Java Hausaufgabe Java Basics - Anfänger-Themen 14
C Problem mit Zeichnen auf einer extends Canvas Class... Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
S Java Array Problem... Java Basics - Anfänger-Themen 2
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
L Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben