Problem mit Methode

frager2345

Aktives Mitglied
Hi, also ich habe hier ein Problem. In meiner Main (3ter Codeblock) will er mir nichts ausprinten: bib.zurueckgeben("Qualityland");
ich habe mir mal die Methode angeschaut und in dieser geht er nicht mal in den Rumpf der If-Abfrage (es geht um diese if Bedingung : if(b.getTitel().equals(titel) , in der Methode ausleihen(); ) Aber warum das?
Danke schonmal für Antworten ;)
Gruß


Klasse Buch:
Java:
public class Buch {
    private boolean ausgeliehen = false;
    private  String autor;
    private  String titel;
    private LocalDate rueckgabeDatum =  null;

    //Konstruktor

    public Buch(String autor, String titel)  {
        setTitel(titel);
        setAutor(autor);

    }
    //getter

    public String getAutor() {
        return autor;
    }
    public String getTitel() {
        return titel;
    }
    public boolean isAusgeliehen(){
        return ausgeliehen;
    }
    public LocalDate getRueckgabedatum() throws IllegaloanExeption{
        if(ausgeliehen){
            return rueckgabeDatum;
        }else{
            throw new IllegaloanExeption("Buch nicht ausgeliehen!");
        }
    }
    //setter

    private void setAutor(String autor) {
        if(checkAutor(autor)){
            throw new IllegalArgumentException("Autor hat ein falsches Format");
        }
        this.autor = autor;
    }

    private void setTitel(String titel) {
        if(checkTitel(titel)){
            throw new IllegalArgumentException("Titel hat ein falsches Format");
        }
        this.titel = titel;
    }
    //checker
    private boolean checkTitel(String titel){
        return titel == null || titel.equals("");
    }
    private boolean checkAutor(String autor){
        return autor == null || autor.equals("");
    }
    //methoden
    public void ausleihen() throws IllegaloanExeption{
        if(!ausgeliehen){
            ausgeliehen = !ausgeliehen;
            rueckgabeDatum = rueckgabeDatum.now().plusDays(14);
        }else{
            throw new IllegaloanExeption("Objekt ist bereits ausgeliehen");
        }
    }
    public void zurueckgeben() throws IllegaloanExeption{
        if(ausgeliehen){
            ausgeliehen = false;
            rueckgabeDatum = null;
        }else{
            throw new IllegaloanExeption("Objekt ist noch nicht ausgeliehen");
        }
    }

    @Override
    public boolean equals(Object a){
        if(a == null){
            return false;
        }
        if(!(a.getClass().equals(this.getClass()))){
            return false;
        }
        Buch buch = (Buch) a;
        return (buch.getTitel() == this.getTitel());
    }

    @Override

    public String toString(){
        return autor + ":" + titel;
    }
}

Klasse Bibliothek:
Code:
public class Bibliothek {
    private  ArrayList<Buch> bibliothek;

    public Bibliothek(){
        bibliothek = new ArrayList<>();
    }

    public Bibliothek(ArrayList<Buch> bibliotek){
        this.bibliothek = bibliotek;
    }

    public void addBuch(Buch b){
        bibliothek.add(b);
    }
    public void addBuecher(ArrayList<Buch> buecher){
        buecher.addAll(buecher);
    }



    public void ausleihen(String titel) throws IllegaloanExeption{
        if(isOpen()){
            for (Buch b:
                    bibliothek) {
                if(b.getTitel().equals(titel)){
                    b.ausleihen();
                    System.out.println("Rückgabedatum: " + b.getRueckgabedatum());
                }
            }

        }else {
            System.out.println("Bibliothek ist geschlossen!");
        }
    }
    public void zurueckgeben(String titel) throws IllegaloanExeption{
        if(isOpen()){
            for (Buch b:
                    bibliothek)
                if(b.getTitel().equals(titel)){
                    System.out.println("!");
                    if(LocalDate.now().isAfter(b.getRueckgabedatum())){
                        System.out.println("Buch wurde nicht fritsgerecht zurückgegeben");
                    }else{
                        System.out.println("Buch wurde fritsgerecht zurückgegeben");
                    }
                    b.zurueckgeben();
                    return;
                }else{
                    throw new IllegaloanExeption("Buch ist nicht in der Liste");
                }

        }else{
            System.out.println("Bibliothek leider geschlossen");
        }
    }


    public boolean isOpen(){
        return !LocalTime.now().isBefore(LocalTime.of(8,30)) && !LocalTime.now().isAfter(LocalTime.of(22, 0));
    }
    public void ExecuteForAllBooks(Consumer<Buch> consumer){
        bibliothek.forEach(consumer);
    }


}

Meine Main:

Code:
public class Main {
    public static void main(String[] args) {
        Bibliothek bib = new Bibliothek();
        bib.addBuch(new Buch("Christian Ullenboom", "Java ist auch eine Insel"));
        bib.addBuch(new Buch("Robert Sedgewick", "Einfuehrung in die Programmierung mit Java"));
        bib.addBuch(new Buch("Marc-Uwe Kling", "Qualityland"));
        bib.addBuch(new Buch("David Eddings", "Kind der Prophezeiung"));
        System.out.println("Hat die Bibliothek gerade geoeffnet: " + bib.isOpen());
        bib.ExecuteForAllBooks(b -> {
            if (b.getTitel().contains("Java")) {
                System.out.println(b);
            }
        });
        try {
            bib.ausleihen("Java ist auch eine Insel");
            bib.ausleihen("Qualityland");
            bib.zurueckgeben("Qualityland");    //diese Zeile ist gemeint ---------------------------------------------
            bib.zurueckgeben("Kind der Prophezeiung");
        } catch (IllegaloanExeption e) {
            System.out.println("Fehler:" + e.getMessage());
        }
    }
}
 

LimDul

Top Contributor
Es müsste vermutlich eine IllegaloanExeption kommen

Du gehst durch alle Bücher durch in der Schleife - aber wenn das betrachtete Buch nicht den korrekten Titel hat, wird eine Exception geworfen und die Schleife abgebrochen. Sprich, es wird immer nur das erste Buch betrachtet.

Die Exception darf nicht in die if-abfrage rein, sondern muss nach der Schleife erfolgen
 

KonradN

Top Contributor
Paar Vorschläge zur Verbesserung:

a) den Code, ein Buch zu suchen, hast Du an mehreren Stellen. So z.B. beim ausleihen und auch zurück geben. Mach das in eine eigene Methode und Du hast dann auch nicht mehr das Problem mit dem if / else. Dann wäre der Code sowas wie

Java:
Buch buch = findeBuchMitTitel(titel);
if (buch == null) {
    // Buch nicht gefunden
} else {
    // Buch gefunden
}

b) Wenn Du sowas wie eine Fehlerbehebung mache musst, dann ist es oft besser statt:
Code:
if (keinFehler) {
   // Mache was Du machen willst
} else {
  // Behandel den Fehler
}

den Code so zu schreiben:
Java:
if (fehlerBedingung) {
    // Behandel ggf. den Fehler
    return; // Brich die Methode ab
}

// Mach was Du eigentlich machen willst

Das hat den Vorteil dass Du nicht so weit einrücken musst.

Generell ist es immer empfehlenswert, die Einrücktiefe (und auch die Methoden selbst) klein zu halten.
Das macht Methoden schlecht zu lesen und sorgt gerade bei Anfängern dazu, dass Fehler nicht oder nur sehr schwer gefunden werden können.
 

frager2345

Aktives Mitglied
Paar Vorschläge zur Verbesserung:

a) den Code, ein Buch zu suchen, hast Du an mehreren Stellen. So z.B. beim ausleihen und auch zurück geben. Mach das in eine eigene Methode und Du hast dann auch nicht mehr das Problem mit dem if / else. Dann wäre der Code sowas wie

Java:
Buch buch = findeBuchMitTitel(titel);
if (buch == null) {
    // Buch nicht gefunden
} else {
    // Buch gefunden
}

b) Wenn Du sowas wie eine Fehlerbehebung mache musst, dann ist es oft besser statt:
Code:
if (keinFehler) {
   // Mache was Du machen willst
} else {
  // Behandel den Fehler
}

den Code so zu schreiben:
Java:
if (fehlerBedingung) {
    // Behandel ggf. den Fehler
    return; // Brich die Methode ab
}

// Mach was Du eigentlich machen willst

Das hat den Vorteil dass Du nicht so weit einrücken musst.

Generell ist es immer empfehlenswert, die Einrücktiefe (und auch die Methoden selbst) klein zu halten.
Das macht Methoden schlecht zu lesen und sorgt gerade bei Anfängern dazu, dass Fehler nicht oder nur sehr schwer gefunden werden können.
Ja hab ich gemerkt 😅man weiß gar nicht mehr wo die Einrückung dazu gehört...Danke für den Tipp!
 

frager2345

Aktives Mitglied
Es müsste vermutlich eine IllegaloanExeption kommen

Du gehst durch alle Bücher durch in der Schleife - aber wenn das betrachtete Buch nicht den korrekten Titel hat, wird eine Exception geworfen und die Schleife abgebrochen. Sprich, es wird immer nur das erste Buch betrachtet.

Die Exception darf nicht in die if-abfrage rein, sondern muss nach der Schleife erfolgen
Paar Vorschläge zur Verbesserung:

a) den Code, ein Buch zu suchen, hast Du an mehreren Stellen. So z.B. beim ausleihen und auch zurück geben. Mach das in eine eigene Methode und Du hast dann auch nicht mehr das Problem mit dem if / else. Dann wäre der Code sowas wie

Java:
Buch buch = findeBuchMitTitel(titel);
if (buch == null) {
    // Buch nicht gefunden
} else {
    // Buch gefunden
}

b) Wenn Du sowas wie eine Fehlerbehebung mache musst, dann ist es oft besser statt:
Code:
if (keinFehler) {
   // Mache was Du machen willst
} else {
  // Behandel den Fehler
}

den Code so zu schreiben:
Java:
if (fehlerBedingung) {
    // Behandel ggf. den Fehler
    return; // Brich die Methode ab
}

// Mach was Du eigentlich machen willst

Das hat den Vorteil dass Du nicht so weit einrücken musst.

Generell ist es immer empfehlenswert, die Einrücktiefe (und auch die Methoden selbst) klein zu halten.
Das macht Methoden schlecht zu lesen und sorgt gerade bei Anfängern dazu, dass Fehler nicht oder nur sehr schwer gefunden werden können.
Ahh, weil ich ja theoretisch dann eine Exeption werfen würde, wenn das erste buch nicht dem gesuchten Buch entspricht. Ich will aber ja die Liste komplett durchgehen. Danke auch dir, hat mir geholfen !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
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
E Problem mit static Methode Java Basics - Anfänger-Themen 4
N Methoden printf Methode Problem Java Basics - Anfänger-Themen 2
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
P TicTacToe Problem mit Win Methode Java Basics - Anfänger-Themen 4
A Problem mit toString Methode Java Basics - Anfänger-Themen 8
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
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
F problem mit erster methode. Java Basics - Anfänger-Themen 6
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
C Problem mit Zugriff auf Variable bzw. get-Methode in anderer Klasse Java Basics - Anfänger-Themen 2
D Problem mit set-Methode Java Basics - Anfänger-Themen 6
F Problem bei Rückgabe von StringBuffer aus Methode Java Basics - Anfänger-Themen 6
M Problem mit methode?? Java Basics - Anfänger-Themen 6
H Methoden Problem mit get-methode im Quelltext Java Basics - Anfänger-Themen 17
B Problem bei dem erstellen einer Main Methode Java Basics - Anfänger-Themen 4
M Problem bei Schleife + Methode Java Basics - Anfänger-Themen 2
G Problem mit sleep() Methode Java Basics - Anfänger-Themen 7
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
chik Problem mit der Runnable Methode Java Basics - Anfänger-Themen 3
S Problem mit main Methode Java Basics - Anfänger-Themen 2
V Problem von einbinden der Methode Java Basics - Anfänger-Themen 2
V Problem mit Insert-Methode des Binärbaums Java Basics - Anfänger-Themen 4
J Methode nimmt Liste -> Problem Java Basics - Anfänger-Themen 4
G PRoblem mit rekursiver float additions methode Java Basics - Anfänger-Themen 9
S Problem mit Eclipse: erkennt vorhandene Main-Methode nicht Java Basics - Anfänger-Themen 13
D Problem bei einer Rekursiven Methode Java Basics - Anfänger-Themen 2
K mein() Methode – Argumente auslesen Problem Java Basics - Anfänger-Themen 6
G Problem mit Methode getColumnCount (JTable) Java Basics - Anfänger-Themen 3
M Problem mit Exponential Methode Java Basics - Anfänger-Themen 6
M Problem beim Aufruf einer Methode: Wo is der Fehler? Java Basics - Anfänger-Themen 12
P Problem mit Array in Methode Java Basics - Anfänger-Themen 4
S Problem mit Methode und Eclipse Java Basics - Anfänger-Themen 8
B Problem mit einer static void Methode Java Basics - Anfänger-Themen 8
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
megachucky Kleines Problem mit dem "return" einer Methode. Java Basics - Anfänger-Themen 11
megachucky Problem mit LinkedList und der get-Methode Java Basics - Anfänger-Themen 2
Paule Problem mit getText()-Methode Java Basics - Anfänger-Themen 12
E Problem mit Methode Math.max Java Basics - Anfänger-Themen 2
D Problem bei Übergabe von Werten an eine Methode Java Basics - Anfänger-Themen 2
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
M Problem mit methode Java Basics - Anfänger-Themen 3
W Problem mit dem Aufruf einer Methode Java Basics - Anfänger-Themen 2
G Problem mit einer Methode Java Basics - Anfänger-Themen 2
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
Kleechen Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem 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
U Problem mit dem initialisieren meines Strings in einer Schleife 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

Ähnliche Java Themen


Oben