From c4357aebcdc8397f250d8d759e0dda9929a8b6ba Mon Sep 17 00:00:00 2001 From: fabianArbeit Date: Thu, 27 Mar 2025 08:49:48 +0100 Subject: [PATCH] Beabsichtigte Restschuld eingebaut --- Darlehenberechner.java | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/Darlehenberechner.java b/Darlehenberechner.java index 170a261..4ae4d1c 100644 --- a/Darlehenberechner.java +++ b/Darlehenberechner.java @@ -17,6 +17,7 @@ class Darlehenberechner { private BigDecimal zinssatzReal; private BigDecimal monatlicheRate; private Integer laufzeitMonate; + private BigDecimal restschuld; private Integer tilgungsfreieZeit; private YearMonth anfangsmonat; private BigDecimal sondertilgungReal; @@ -72,6 +73,17 @@ class Darlehenberechner { } + public BigDecimal getRestschuld() { + return restschuld; + } + + + public Konfiguration setRestschuld(BigDecimal restschuld) { + this.restschuld = restschuld; + return this; + } + + public Integer getTilgungsfreieZeit() { return tilgungsfreieZeit; } @@ -110,6 +122,7 @@ class Darlehenberechner { private static final BigDecimal EINHUNDERT = BigDecimal.valueOf(100); private final Integer laufzeitMonate; + private final BigDecimal restschuld; private final BigDecimal zinssatz; private BigDecimal sondertilgung; private int summeMonate = 0; @@ -164,6 +177,12 @@ class Darlehenberechner { if (in != null && !in.isBlank()) { String[] split = in.split(":"); konfig.setLaufzeit(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + } else { + System.out.print("Restschuld(optional): "); + in = dis.readLine(); + if (in != null && !in.isBlank()) { + konfig.setRestschuld((BigDecimal) DECIMAL_FORMAT.parse(in)); + } } System.out.print("Anzahl tilgungsfreier Monate(optional): "); in = dis.readLine(); @@ -224,9 +243,13 @@ class Darlehenberechner { private Darlehenberechner(Konfiguration konfig) { laufzeitMonate = konfig.getLaufzeitMonate(); + restschuld = konfig.getRestschuld(); zinssatz = konfig.getZinssatz(); sondertilgung = konfig.getSondertilgung() != null ? konfig.getSondertilgung().multiply(konfig.getDarlehenswert()) : BigDecimal.ZERO; aktRestschuld = konfig.getDarlehenswert(); + if (restschuld != null) { + aktRestschuld = aktRestschuld.subtract(restschuld); + } aktMonatlicheRate = konfig.getMonatlicheRate(); aktTilgungsfreieZeit = konfig.getTilgungsfreieZeit(); aktMonat = konfig.getAnfangsmonat(); @@ -276,12 +299,17 @@ class Darlehenberechner { } boolean sondertilgungFaellingErstesJahr = summeMonate < 12 && aktMonat.getMonth() == Month.DECEMBER; if (sondertilgungFaellingErstesJahr || summeMonate > 1 && aktMonat.getMonth() == Month.JANUARY) { - aktRestschuld = aktRestschuld.subtract(sondertilgung); - System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(sondertilgung) + " = 0,00 + " + DECIMAL_FORMAT.format(sondertilgung) + " | " + DECIMAL_FORMAT.format(aktRestschuld)); + aktRestschuld = aktRestschuld.compareTo(sondertilgung) > 0 ? aktRestschuld.subtract(sondertilgung) : aktRestschuld; + System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(sondertilgung) + " = 0,00 + " + DECIMAL_FORMAT.format(sondertilgung) + " | " + DECIMAL_FORMAT.format(getRestschuldFuerOutput())); } } + private BigDecimal getRestschuldFuerOutput() { + return restschuld != null ? aktRestschuld.add(restschuld) : aktRestschuld; + } + + private void berechneBeitragAufteilung() { aktZinsbetrag = aktRestschuld.multiply(zinssatz) .divide(ZWOELF, MathContext.DECIMAL128); @@ -299,7 +327,7 @@ class Darlehenberechner { private void druckeAktuelleMonatswerte() { System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(aktMonatlicheRate) + " = " + DECIMAL_FORMAT.format(aktZinsbetrag) - + " + " + DECIMAL_FORMAT.format(aktTilgungsbetrag) + " | " + DECIMAL_FORMAT.format(aktRestschuld)); + + " + " + DECIMAL_FORMAT.format(aktTilgungsbetrag) + " | " + DECIMAL_FORMAT.format(getRestschuldFuerOutput())); } @@ -331,7 +359,8 @@ class Darlehenberechner { jahressummeTilgungKreditjahr = BigDecimal.ZERO; jahressummeRatenKreditjahr = BigDecimal.ZERO; desc = "Kreditjahr " + (summeMonate + 11) / 12; // + 11 weil integerdivision und X Jahre plus 1 Monat soll X + 1 tes Kreditjahr ergeben - } else { + } + if (aktMonat.getMonth() == Month.DECEMBER) { jahressummeZinsen = jahressummeZinsenKalenderjahr; jahressummeTilgung = jahressummeTilgungKalenderjahr; jahressummeRaten = jahressummeRatenKalenderjahr; @@ -364,6 +393,6 @@ class Darlehenberechner { int laufzeitJahreFinal = summeMonate / 12; int teillaufzeitMonateFinal = summeMonate % 12; System.out.println("Laufzeit: " + laufzeitJahreFinal + " Jahre " + teillaufzeitMonateFinal + " Monate"); - System.out.println("Restschuld: " + DECIMAL_FORMAT.format(aktRestschuld)); + System.out.println("Restschuld: " + DECIMAL_FORMAT.format(getRestschuldFuerOutput())); } }