Exceptions und Konten

Louis12

Aktives Mitglied
Hallo Java Community,
könnt ihr mir bitte bei meiner Frage Helfen ?

Die Einleitung

In dieser Aufgabe werden Sie ein einfaches Buchungssystem implementieren.

Importieren dazu zunächst das Projekt „Aufgabe 10 - Accounting“ in Ihren Workspace und sehen sich die Klasse Account (Konto) genauer an: Ein Konto besitzt die Attribute Name, Offen, Wert und Delta (Veränderung).

Eine Buchung auf einem Konto soll wie folgt ablaufen:

1. Das Konto wird geöffnet (open) 2. Eine Buchung wird vorbereitet (credit oder debit) 3.

Eine Buchung wird durchgeführt (commit) 4. Das Konto wird geschlossen (abort oder close)

Die Klasse Accountig sieht so aus:
Code:
package ledger;

public abstract class Account {
   
    private String name;   
    private boolean open = false;
    protected int value = 5000;
    protected int delta = 0;
   
   
    public Account(String name) {
        this.name = name;
    }
   
    public abstract void credit(int value); //Plussaldo
   
    public abstract void debit(int value); // Minussaldo
   
    public void open() {
        this.open = true;
    }
   
    public void abort() {
        delta = 0;
    }
   
    public void commit() {
        value += delta;
        delta = 0;
    }
   
    public void close() {
        this.open = false;
    }
   
    public boolean isOpen() {
        return open;
    }
   
    public String getName() {
        return name;
    }
   
    @Override
    public String toString() {       
        return name + " (value=" + value + ", open=" + open + ")";
    }

}






Die Aufgagenstellung

Implementieren Sie die Methoden credit(int) und debit(int) in den Klassen Asset (Aktivkonto) und Liability (Passivkonto).

Achten Sie darauf, dass Sie nur den Deltawert und nicht den Wert des Kontos selbst verändern.

Erst bei einem späteren Aufruf von commit() (siehe Klasse Account) soll der Wert des Kontos angepasst werden.

Werfen Sie passende Exceptions (siehe Package exceptions), wenn ein Konto nicht geöffnet ist oder der Betrag auf dem Konto nicht ausreicht um den gegebenen Wert auf dem Konto zu buchen (negativer Wert auf dem Konto).

Achten Sie darauf, dass Sie nur den Deltawert und nicht den Wert des Kontos selbst verändern.

Folgende Frage: Ich habe z.B beim Aktivkonto (Asset) die klasse insofern ergäntzt.

Code:
package ledger;

public class Asset extends Account { // Vermögenswert/Kapital // Aktivkonto

    public Asset(String name) {
        super(name);
    }

    @Override
    public void credit(int value) { //Abgänge
    delta -= value;
    }

    @Override
    public void debit(int value) { //Zugänge
        delta += value;
       
    }
}


Lg
Louis
 

Louis12

Aktives Mitglied
Stimmt wollte fragen, ob der Code richtig ist bzw. auch die Logik das der Delta Wert geringer wird, da es sich um ein Haben-Konto (credit) im Aktivkonto (Asset) handelt.
 

mihe7

Top Contributor
Durch eine Buchung im Haben wird der Sollsaldo des Aktivkontos geringer. Beim Passivkonto verringert sich durch eine Buchung im Soll der Habensaldo. Geht man also davon aus, dass value den Soll- bzw. Habensaldo darstellen soll, stimmt die Berechnung, da am Ende delta einfach auf value addiert wird.

Dein Code setzt aber noch nicht alle Anforderungen der Aufgabe um.
 

Louis12

Aktives Mitglied
Danke für die Antwort, Ich habe nun die Klassen Asset und liabillity ergäntzt, Die Exeptions habe ich auch probiert allerdings ist es mir noch gelungen

Fragen: Sind meine Klassen Asset, liabillity richtig ?.

Wenn meine Ansätze bei den Exeptions richtig sind, wie schaffe ich es die Variablen so zu benutzen, und trotzdem die Aufgabenstellung gerecht zu werden.

Code:
package ledger;

public class Asset extends Account { // Aktivkonto

    public Asset(String name) {
        super(name);
    }

    @Override
    public void credit(int value) { //Abgänge
    delta -= value;
    commit();
    }

    @Override
    public void debit(int value) { //Zugänge
        delta += value;
        commit();
       
    }
}

Code:
package ledger;

public class Liability extends Account { // Passivkonto

    public Liability(String name) {
        super(name);
    }

    @Override
    public void credit(int value) { //Zugänge
        delta += value;
        commit();

    }
   

    @Override
    public void debit(int value) { // Abgänge
        delta -= value;
        commit();
    }
}

Code:
package exceptions;

public class AmountInsufficientException extends AccountException { // Betrag nicht ausreichend Ausnahme
   
    private static final long serialVersionUID = 60490504565097362L;

    public AmountInsufficientException(String message) {
        super(message);
    }
   
    void withdraw (double amount) throws AmountInsufficientException
    {
        if (amount > value)
            throw new AmountInsufficientException("AmountInsufficientException");
        else
            value -= amount;
    }

}

Code:
package exceptions;

public class AccountClosedException extends AccountException { // Acc kann nicht geöffnet werden

    private static final long serialVersionUID = -5011280210129877931L;

    public AccountClosedException(String message) {
        super(message);

    }
   
    void ClosedAcc (double amount) throws AccountClosedException
    {
        if (open == false)
            throw new AmountInsufficientException("AccountClosedException");
    }
   
   
   
}
 

mihe7

Top Contributor
Fragen: Sind meine Klassen Asset, liabillity richtig ?.
Nein.
  1. das commit() muss raus. Es geht darum, dass man auf den Konten erstmal mehrere "Buchungen sammeln" und alle auf einmal am Ende festschreiben kann.
  2. Du musst in credit/debit prüfen, ob das delta sich durch die Buchung derart verändern würde, dass bei einem späteren commit() der Kontostand ins Negative rutscht. In dem Fall dürftest Du das delta nicht anpassen sondern musst die Buchung abweisen, indem Du eine Exception aus dem Paket exceptions wirfst.
  3. Ich kann der von Dir angegebenen Aufgabenbeschreibung nicht entnehmen, dass Du selbst Exception-Klassen schreiben sollst. Da steht lediglich "siehe Package exceptions", was ich dahingehend verstehe, dass Du bereits vorhandene Exception-Klassen aus dem exceptions-Paket verwenden sollst.
 

Louis12

Aktives Mitglied
Danke für die Antwort,
habe es ergänzt, sieht es jetzt besser aus ?

Ich habe bei allen Abgängen die Exeption AmountInsufficientException hinzugefügt, den bei Zugängen ist es ja nicht nötig.

Ist der Ansatz bei bei der Exeption AccountClosedException Ansatzweise richtig ?

Code:
package ledger;

import exceptions.AccountClosedException;
import exceptions.AmountInsufficientException;

public class Asset extends Account { // Aktivkonto

    public Asset(String name) {
        super(name);
    }

    @Override
    public void credit(int value) throws AmountInsufficientException, AccountClosedException { //Abgänge
    if(delta <= value) {
        delta -= value;
    }else {
        throw new AmountInsufficientException("");
    }
    open();
   
   
    }

    @Override
    public void debit(int value)  { //Zugänge
        delta += value;
       
   
       
    }
   
   
}


Code:
package ledger;

import exceptions.AccountClosedException;
import exceptions.AmountInsufficientException;

public abstract class Account {
   
    private String name;   
    private boolean open = false;
    protected int value = 5000;
    protected int delta = 0;
   
   
    public Account(String name) {
        this.name = name;
    }
   
    public abstract void credit(int value) throws AmountInsufficientException, AccountClosedException; // Abgänge im liabillity und Zugänge im Asset
   
    public abstract void debit(int value) throws AmountInsufficientException; // Abgänge im Asset und Zugänge im liabillity soll
   
    public void open() throws AccountClosedException {
        this.open = true;
        if (open == false);
            throw new AccountClosedException("AccountClosedException");
    }
   
    public void abort() {
        delta = 0;
    }
   
    public void commit() {
        value += delta;
        delta = 0;
    }
   
    public void close() {
        this.open = false;
    }
   
    public boolean isOpen() {
        return open;
    }
   
    public String getName() {
        return name;
    }
   
    @Override
    public String toString() {       
        return name + " (value=" + value + ", open=" + open + ")";
    }

}
 
X

Xyz1

Gast
Werfen Sie passende Exceptions (siehe Package exceptions), wenn ein Konto nicht geöffnet ist oder der Betrag auf dem Konto nicht ausreicht um den gegebenen Wert auf dem Konto zu buchen (negativer Wert auf dem Konto)
Der Fehler ist das Du nur den delta-Wert miteinbezogen hattest und nicht den Kontowert.

Mir ist auch der Unterschied zwischen Aktivkonto und Passivkonto noch nicht ganz klar.

Angenommen der Kontowert wäre 500000 wie ginge eine Abbuchung bei Delta=0 dann? :(
 

mihe7

Top Contributor
habe es ergänzt, sieht es jetzt besser aus ?
Jein. Das open() muss raus. In den Methoden debit() und credit() passt Du ausschließlich das delta an, sofern zulässig. Falls unzulässig, wirfst Du eine Exception.

Unzulässig ist
a) der Versuch, auf einem geschlossenen Konto zu buchen -> AccountClosedException
b) eine Abbuchung eines Betrags x, wenn das Konto diesen Betrag nicht deckt -> AmountInsufficientException

Nehmen wir mal einen Kontostand von 50 und ein delta von 0 an. Jetzt willst Du 30 abbuchen, was sich negativ auf den Kontostand auswirken würde. Damit eine Abbuchung zulässig ist, muss Kontostand + delta >= betrag gelten. Hier also kein Problem, denn 50 + 0 = 50 >= 30.

Durch die Buchung ändert sich das delta zu -30. Jetzt willst Du nochmal 10 abbuchen. Es gilt Kontonstand + delta = 50 -30 = 20, womit der abzubuchende Betrag von 10 immer noch gedeckt wäre. Durch die Buchung ändert sich das delta zu -40.

Jetzt willst Du weitere 20 abbuchen. Kontostand + delta = 50 - 40 = 10, was für die abzubuchenden 20 nicht mehr ausreicht. Daher wird jetzt eine Exception geworfen.

Mir ist auch der Unterschied zwischen Aktivkonto und Passivkonto noch nicht ganz klar.
Bei ihm oder allgemein?
 

mihe7

Top Contributor
Die Bilanz stellt auf der einen Seite das in Geld ausgedrückte Vermögen (Aktiva), auf der anderen Seite das Kapital (Passiva) dar. Das Kapital wird sozusagen als die Quelle des Vermögens verstanden. Es gilt die Bilanzgleichung: Summe Aktiva = Summe Passiva

Konten dienen dazu, Geschäftsfälle über das Jahr aufzuzeichnen. Ein Aktivkonto ist dabei einer Bilanzposition der Aktivseite, ein Passivkonto einer Bilanzposition der Passivseite zuzurechnen.

Jedes Konto hat eine Soll- und eine Habenseite, die unabhängig voneinander bebucht werden können. Zugänge werden auf Aktivkonten im Soll gebucht, auf Passivkonten im Haben. Abgänge dem entsprechend genau andersrum.

Ein Buchungssatz zeichnet wenigstens eine Soll- und eine Habenbuchung auf, wobei es auch hier eine Invariante gibt: Summe Sollbuchungen = Summe Habenbuchungen (wobei natürlich immer die Beträge summiert werden).
 

Louis12

Aktives Mitglied
Hallo,
Danke für alle bisherigen Antworten ! allerdings versuche ich die Werte ständig anzupassen. ebenfalls frage ich mich, ob doch eine if Anfrage benutzen soll oder überhaupt mein Delta stimmt und was ich genau nicht bedacht habe.

Ich habe hierfür 2 Ansätze

Ansatz 1

Code:
@Override
    public void credit(int value) throws AmountInsufficientException, AccountClosedException { //Abgänge
    if(delta <= value) {
        delta -= value;
        //if(value + delta >= delta) ;
       
    }
    throw new AmountInsufficientException("");

Ansatz 2
Code:
public void debit(int value) throws AmountInsufficientException  { //Zugänge
        delta += value;
       
        if(value <0) {
            throw new AmountInsufficientException("");

        }
 

Meniskusschaden

Top Contributor
allerdings versuche ich die Werte ständig anzupassen
Du musst dir schon überlegen, was die Werte bedeuten, die du da ausrechnest und vergleichst. @mihe hat es oben ja schon an einem konkreten Beispiel demonstriert.
Solange du nur zwei Variablen benutzt, kann es nicht richtig funktionieren, denn um den neuen Kontostand zu ermitteln, sind drei Werte relevant: der aktuelle Kontostand, die Summe der bereits zuvor erfassten, noch offenen Buchungen und der Wert der neuen Buchung.
 

Louis12

Aktives Mitglied
Ja das stimmt allerdings existieren nur die Variablen delta,Value muss ich dann eine neue Variable hinzufügen ?.
Oder von der Klasse Account etwas entnehmen ?
 

Louis12

Aktives Mitglied
Asooo Danke für die Antwort !
Ich wollte fragen ob dann das überall gleich abläuft egal ob Abgang oder Zugang also die reschnung

Inzwischen habe eine andere Aufgabe mir angeguckt und wollte fragen,
ob jemand mir bitte auf die Sprünge helfen kann, den ich weiß garnicht wie ich anfangen soll

Implementieren Sie die Methode postEntry() in der Klasse Accountant, welche einen Buchungssatz als Parameter übergeben bekommt.

Ein korrekter Buchungssatz besteht aus einer Reihe an Konten, die im Soll angesprochen werden, gefolgt von einem ‚;‘-Zeichen, gefolgt von einer Reihe an Konten, die im Haben abgesprochen werden.

Die einzelnen Konto-Wert-Paare sind durch Kommas getrennt, Kontoname und Wert werden durch ein Leerzeichen getrennt.

Ein beispielhafter Buchungssatz lautet: „Equity 27, Bonds_Payable 385; Land 137, Other_Revenues 275“

Überprüfen Sie in Ihrer Implementierung zunächst die Syntax des übergebenen Buchungssatzes und stellen Sie sicher, dass der Betrag auf der Soll-Seite dem Betrag auf der Haben-Seite entspricht. Werfen Sie im Fehlerfall passende Exceptions.

Für die anschließende Buchung gilt: 1. Öffnen Sie zunächst alle beteiligten Konten (open) 2. Bereiten Sie die Buchung auf jedem Konto vor (credit oder debit) 3.

Tritt bei keinem Konto ein Fehler auf, dann führen Sie die Buchung durch (commit) 4. Tritt ein Fehler auf (z.B. Betrag nicht ausreichend), sollen alle bisherigen Änderungen rückgängig gemacht werden (abort) 5. Abschließend sollen alle Konten in jedem Fall geschlossen werden (close
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
C Exceptions identifizieren Java Basics - Anfänger-Themen 5
A Exceptions mit objektreferenzen Java Basics - Anfänger-Themen 4
A Exceptions und methods Java Basics - Anfänger-Themen 2
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
A Exceptions und Packages Java Basics - Anfänger-Themen 6
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
X Exceptions Benutzereingaben Java Basics - Anfänger-Themen 4
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
D Frage zu Exceptions Java Basics - Anfänger-Themen 8
I Wie programmiert man Exceptions? Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
C Erste Schritte Exceptions nicht verstanden Java Basics - Anfänger-Themen 2
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
J Exceptions Java Basics - Anfänger-Themen 69
C Exceptions Java Basics - Anfänger-Themen 8
C Exceptions Java Basics - Anfänger-Themen 6
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
F Exceptions Java Basics - Anfänger-Themen 6
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
N Compiler-Fehler Drei Exceptions in GUIHack für Dreiecke auf MoveButtons Java Basics - Anfänger-Themen 36
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
S Exceptions Java Basics - Anfänger-Themen 7
M Vererbung Problem Vererbung/Exceptions Java Basics - Anfänger-Themen 9
S Verschachtelte Exceptions - Übersicht verbessern Java Basics - Anfänger-Themen 2
J Eclipse Exceptions Java Basics - Anfänger-Themen 2
K Schleifen und Exceptions Java Basics - Anfänger-Themen 8
K Exceptions auslagern Java Basics - Anfänger-Themen 15
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
F Erste Schritte Übung zu Exceptions Java Basics - Anfänger-Themen 24
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Int Exceptions Java Basics - Anfänger-Themen 12
M Exceptions per throws oder try Java Basics - Anfänger-Themen 4
M Compiler-Fehler Queue als ArrayList mit Exceptions Java Basics - Anfänger-Themen 3
T Exceptions in einer Klasse Java Basics - Anfänger-Themen 3
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
H Methoden Überflüssige Exceptions Java Basics - Anfänger-Themen 20
C Exceptions Java Basics - Anfänger-Themen 14
1 While Schleife Exceptions Java Basics - Anfänger-Themen 6
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
D Frage zu Exceptions Java Basics - Anfänger-Themen 12
M Compiler-Fehler Exceptions lieber throwen oder direkt catchen? Java Basics - Anfänger-Themen 8
T Exceptions Java Basics - Anfänger-Themen 19
B Wie finde ich Exceptions? Java Basics - Anfänger-Themen 19
Dit_ Input/Output Alle Exceptions protokollieren Java Basics - Anfänger-Themen 9
T Exceptions Java Basics - Anfänger-Themen 12
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
F Exceptions werfen oder catchen?? Java Basics - Anfänger-Themen 14
D Exceptions - Ausnahmebehandlung Java Basics - Anfänger-Themen 19
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
J Paar Fragen zu Exceptions Java Basics - Anfänger-Themen 16
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
C Exceptions beim Beenden Java Basics - Anfänger-Themen 2
C TimerTask und Exceptions Java Basics - Anfänger-Themen 5
E Klasse öffnen, mehrere Exceptions Java Basics - Anfänger-Themen 9
C Exceptions Java Basics - Anfänger-Themen 7
G 2 Exceptions in einer Methode Java Basics - Anfänger-Themen 3
firefexx Exceptions werfen Java Basics - Anfänger-Themen 5
0 Exceptions mehrfach fangbar? Java Basics - Anfänger-Themen 4
O Exceptions Java Basics - Anfänger-Themen 3
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
H Diverse Exceptions - Troubleshooting Java Basics - Anfänger-Themen 3
J exceptions Java Basics - Anfänger-Themen 8
sc0p InterruptedExceptions und Exceptions - in Einem! Java Basics - Anfänger-Themen 5
M Frage zu Exceptions Java Basics - Anfänger-Themen 19
M Fragen zu Exceptions Java Basics - Anfänger-Themen 3
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
D Exceptions werfen + beenden Java Basics - Anfänger-Themen 12
M Exceptions aus interface-Methoden Java Basics - Anfänger-Themen 2
S File.renameTo und Exceptions / Fehlermeldung Java Basics - Anfänger-Themen 2
B Exceptions in Liste sammeln? Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
O "restliche" Exceptions fangen Java Basics - Anfänger-Themen 8
H [Stil] Exceptions in der Klasse behandeln oder throwen? Java Basics - Anfänger-Themen 62
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
V Aktivitätsdiagramm / Exceptions Java Basics - Anfänger-Themen 5
V Exceptions Java Basics - Anfänger-Themen 6
K Frage zu Exceptions -> Logging Java Basics - Anfänger-Themen 6
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
R JDom Exceptions Java Basics - Anfänger-Themen 4
R Datei einlesen mit Exceptions Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
G Exceptions - spiegeln wir da nicht einen Spiegel im Spiegel? Java Basics - Anfänger-Themen 10
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
U Frage zu Exceptions Java Basics - Anfänger-Themen 5
mwildam Philosophiefrage zu Exceptions und Rückgabewerten Java Basics - Anfänger-Themen 6
D Static, final Objekte mit Exceptions im Konstruktor Java Basics - Anfänger-Themen 2
G Exceptions Java Basics - Anfänger-Themen 4
G ServerSocket: Exceptions und Timeout Probleme Java Basics - Anfänger-Themen 10
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
P Problem mit exceptions Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben