• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung

E

En_Ki

Neues Mitglied
Hallo zusammen,

ich komme bei einer Aufgabe einfach nicht weiter, ich hoffe ihr könnt mir helfen wo mein Fehler ist bzw. was ich besser machen könnte.

Die Aufgabenstellung:

Überarbeiten Sie die Plausibilitätsprüfung in dem Konstruktor der Klasse
Wein aus dem Code 1.5 dieses Studienheftes so, dass bei ungültigen Werten nicht mehr
stillschweigend Standardwerte gesetzt werden, sondern jeweils eine Ausnahme der
Klasse IllegalArgumentException
ausgelöst wird.
Sorgen Sie dafür, dass diese Ausnahmen an den Aufrufer weitergeleitet werden.

Erstellen Sie auch eine main()-Methode, in der Sie die Ausnahmen behandeln, und
testen Sie dort die Änderungen


Klasse Wein:

Java:
/* ################################
 * Die Klasse f�r den Wein
 * Jetzt mit Plausibilit�tspr�fung 
 ##################################*/
package java08b_01_05;

class Wein {
   private int alter;
   private double grundpreis;
   private double preisProFlasche;
  

//   //der StandardkKonstruktor
   public Wein()
   {
       //er ruft �ber this() den Konstruktor mit den beiden Parametern auf
       //und �bergibt die Standardwerte
       this(1, 10);
   }
  
  
   //der Konstruktor setzt das Alter
   //der Preis erh�lt einen Standardwert
   public Wein(int alter)
   {
       //er ruft ebenfalls �ber this den Konstruktor mit den beiden Parametern auf
       this(alter, 10);
   }
  
      

   //der Konstruktor setzt den Preis
   //das Alter erh�lt einen Standardwert
   public Wein(double grundpreis)
   {
       //und dieser Konstruktor ruft auch den Konstruktor mit den beiden Parametern auf
       this(1, grundpreis);
   }
  
  
   //der Konstruktor setzt das Alter und den Grundpreis
   //er enth�lt jetzt Plausibilit�tspr�fungen
   public Wein(int alter, double grundpreis)
   {
  
   try
   {
       //die Plausibilit�tspr�fung f�r das Alter
       if (alter > 0);
       this.alter = alter;
       this.alter = 1;
          
   }
          
           catch (IllegalArgumentException e){
      
               System.out.println("Test1");
           }
      
          
           try
           {
               //und auch f�r den Preis
               if (grundpreis > 9);
      
               this.grundpreis = grundpreis;
              
               this.grundpreis = 10;
           }
      
           catch (IllegalArgumentException e)
           {
              
               System.out.println("Test2");
           }
              
          
      
      
   }

      
  
      
   //die Methode berechnet den Preis pro Flasche
   public void preisBerechnen()
   {
       preisProFlasche = alter * grundpreis;
   }
  
   //die Methode liefert den Preis pro Flasche
   public double getPreisProFlasche()
   {
       preisBerechnen();
       return preisProFlasche;
      
   }

  
}






Main Methode:


Java:
public class Java08b_01_05 {
   public static void main(String[] args)
   {
       Wein flasche1= new Wein();
       Wein flasche2= new Wein();
       try{
        new Wein(-10,20.5);
        new Wein (10,10);
       }  
       catch (IllegalArgumentException e){
          
      
       System.out.println(flasche1.getPreisProFlasche()+" Programm ende Fehler version : "+ e.getMessage() );
       System.out.println(flasche2.getPreisProFlasche() +" Programm ende  Alles Okay version : " + e.getMessage() );
       }
      
   }
      
}

ich danke euch schon mal im vorraus für die Hilfe.
 
Zuletzt bearbeitet von einem Moderator:
mihe7

mihe7

Top Contributor
1. Bitte benutze CODE-Tags
2. Du sollst einfach bei ungültigen Werten eine IllegalArgumentException werfen, z. B.
Java:
if (alter <= 0) {
    throw new IllegalArgumentException("Alter<=0");
}
 
Protomelas

Protomelas

Mitglied
1. Bitte benutze CODE-Tags
2. Du sollst einfach bei ungültigen Werten eine IllegalArgumentException werfen, z. B.
Java:
if (alter <= 0) {
    throw new IllegalArgumentException("Alter<=0");
}
Hallöchen, auch wenn das Thema was Älter ist, hänge ich auch derzeit an dieser Aufgabe.

Das mit dem
Java:
if (alter <= 0) {
    throw new IllegalArgumentException("Alter<=0");
}
habe ich auch rausbekommen. Was mich stört, das Programm wird bei dem Fehler beendet..
Auch wenn das die korrekte Lösung der Aufgabenstellung ist, würde ich mich für einen besseren Lösungsansatz interessieren.
Try/Catch funktioniert ja nicht in dem Konstruktor.
 
kneitzel

kneitzel

Top Contributor
Im Augenblick verstehe ich nicht, wo Du das Problem hast. In dem Konstruktor ist ja auch kein try/catch gewollt. Die Ausführung soll ja mit einer Exception an der Stelle abbrechen.

Und wie die im Konstruktor geworfene Exception abgefangen werden kann, das sieht man ja auch im Code:
Java:
       try{
        new Wein(-10,20.5);
        new Wein (10,10);
       } 
       catch (IllegalArgumentException e){
           // ...
       }
Sprich: Die Erzeugung des Instanz muss in einem try Block sein und die Exception abgefangen werden.
 
1

123neu

Bekanntes Mitglied
Ich versteh hier das Problem noch nicht ganz... die Plausibilitätsprüfung kann doch nicht so schwer sein...

Java:
public class Wein {

    private int alter;
    private double grundpreis;
    private double koeffizient;
    private double preisProFlasche;

    public Wein() {
        this(1, 10.0, 1.0);
    }

    public Wein(int alter) {
        this(alter, 10.0, 1.0);
    }

    public Wein(int alter, double grundpreis) {
        this(alter, grundpreis, 1.0);
    }

    public Wein(int alter, double grundpreis, double koeffizient) {
        if (alter <= 0) {
            throw new IllegalArgumentException("alter <= 0");
        }
        if (grundpreis < 10.0) {
            throw new IllegalArgumentException("grundpreis < 10.0");
        }
        if (koeffizient <= 0.1) {
            throw new IllegalArgumentException("koeffizient <= 0.1");
        }
        this.alter = alter;
        this.grundpreis = grundpreis;
        this.koeffizient = koeffizient;
        berechnePreisProFlasche();
    }

    private void berechnePreisProFlasche() {
        preisProFlasche = alter * koeffizient * grundpreis;
    }

    /**
     * @return the alter
     */
    public int getAlter() {
        return alter;
    }

    /**
     * @return the grundpreis
     */
    public double getGrundpreis() {
        return grundpreis;
    }

    /**
     * @return the koeffizient
     */
    public double getKoeffizient() {
        return koeffizient;
    }

    /**
     * @return the preisProFlasche
     */
    public double getPreisProFlasche() {
        return preisProFlasche;
    }

    @Override
    public String toString() {
        return String.format("Wein [alter=%s, grundpreis=%s, koeffizient=%s, preisProFlasche=%s]", alter, grundpreis, koeffizient, preisProFlasche);
    }

    public static void main(String[] args) {
        Wein standard = new Wein();
        Wein gehoben = new Wein(5);
        Wein extravagant = new Wein(25, 15);
        Wein fuerCheater = new Wein(25, 15, 0.8);
        try {
            Wein ungeniessbar = new Wein(0);
            System.out.println(ungeniessbar);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("Standard: " + standard);
        System.out.println("Gehoben: " + gehoben);
        System.out.println("Extravagant: " + extravagant);
        System.out.println("20 % off: " + fuerCheater);
    }

}
 
Protomelas

Protomelas

Mitglied
Also ich hab das nun so gelöst:

main:
    // Ungültiges int (Negative) / Gültiges double   
        try {   
            Wein Rot = new Wein(-5, 20.5);
            System.out.println("Rot: " + Rot.getPreisProFlasche());

        } catch (IllegalArgumentException e) {
            System.out.println("Rot: " + e.getLocalizedMessage());
        }
HIer rufe ich nun einen von den zahlreichen Konstruktoren auf:

Konstruktor:
// Beide Werte werden übergeben   
    public Wein(int alter, double grundpreis) {
        this.grundpreis = grundpreis;
        this.alter = alter;
        PlausiCheck();
    }

und den Plausibilitätscheck habe ich in einer eigenen Methode gepackt:

Plausibilitätsprüfung:
// Plausibilitätsprüfung ausgelagert in einer eigenen Methode

    private void PlausiCheck() {
        if (alter <= 0 && grundpreis <= 0) {
            throw new IllegalArgumentException("Beide Werte sind ungültig!");
        }
        if (alter <= 0) {
            throw new IllegalArgumentException("Alter muss größer als 0 sein!");
        }
        if (grundpreis <= 0) {
            throw new IllegalArgumentException("Grundpreis muss größer als 0 sein!");
        }

    }

Hoffe das ist so alles in Ordnung, funktionieren tut es auf jedenfall.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Was mich stört, das Programm wird bei dem Fehler beendet..
Generell ist es in dem Fall auch sinnvoll, das Programm mit einem Fehler zu beenden.

Die Exception (bzw, allgemeiner RuntimeExceptions) bedeutet ja im Prinzip „der Programmierer hat einen Fehler gemacht“, und das Programm befindet sich danach in einem ungültigen Zustand (da ja irgendwas, was eigentlich ausgeführt werden sollte, nicht ausgeführt werden konnte). Da kann man im Allgemeinen nicht anders drauf reagieren, als das Programm zu beenden (oder zumindest den aktuellen Teil des Programms, der betroffen ist).

Wenn du als Programmierer sinnvollere Möglichkeiten siehst, als mit einer Fehlermeldung und Beenden auf solche Fehler (RuntimeExceptions) zu reagieren, dann solltest du die natürlich einbauen. Aber, dann nicht als Reaktion auf den schon ausgelösten Fehler, sondern proaktiv in dem du prüfst, ob zB die Argumente, die du übergeben willst, gültig sind.
 
1

123neu

Bekanntes Mitglied
mrBrown meint damit, dass Ausnahmen nicht den Programmfluss steuern sollten.

Bastle dir einen Verifier!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
M Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
V Was soll alles in den Konstruktor? Java Basics - Anfänger-Themen 3
J Objektwerte addieren / Konstruktor Java Basics - Anfänger-Themen 19
J Konstruktor implementieren, zahl 0 repräsentieren Java Basics - Anfänger-Themen 4
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
J Methoden Beliebig viele Objekt-Eingabeparameter im Konstruktor Java Basics - Anfänger-Themen 6
K Objekte im Konstruktor initialisieren Java Basics - Anfänger-Themen 3
W Enum Konstruktor Type Java Basics - Anfänger-Themen 2
M Konstruktor Problem - Variabel Erhöhen Java Basics - Anfänger-Themen 5
K Erste Schritte Konstruktor variable in die klasse Java Basics - Anfänger-Themen 7
K Best Practice Date in einem Konstruktor angeben Java Basics - Anfänger-Themen 5
M Konstruktor mit unterschiedlichen Parametern? Java Basics - Anfänger-Themen 3
V Frage zum Konstruktor Java Basics - Anfänger-Themen 6
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
M Vererben von Superklasse ohne Konstruktor Java Basics - Anfänger-Themen 9
G Auf einen bestimmten Konstruktor in der abstrakten Superklasse zugreifen? Java Basics - Anfänger-Themen 2
B Exception im Konstruktor Java Basics - Anfänger-Themen 22
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
B Array soll an Konstruktor übergeben werden..Hilfe! Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Anzeige

Neue Themen


Oben