From 6d16191e0e748c45404cf04a025fb7a5a3e0381e Mon Sep 17 00:00:00 2001 From: fabianArbeit Date: Tue, 25 Mar 2025 13:35:38 +0100 Subject: [PATCH] - Zeige korrekte Jahressummen - drucke letzte Summe Kreditjahr nach Ablauf --- Darlehenberechner.java | 61 ++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/Darlehenberechner.java b/Darlehenberechner.java index 2717d0b..418a65d 100644 --- a/Darlehenberechner.java +++ b/Darlehenberechner.java @@ -104,18 +104,22 @@ class Darlehenberechner { private final Integer laufzeitJahre; private final BigDecimal zinssatz; private BigDecimal sondertilgung; - private int summeMonate; + private int summeMonate = 0; private BigDecimal aktRestschuld; private BigDecimal aktMonatlicheRate; private BigDecimal aktZinsbetrag; private BigDecimal aktTilgungsbetrag; private Integer aktTilgungsfreieZeit; private YearMonth aktMonat; - private BigDecimal summeZinsen; - private BigDecimal summeTilgung; - private BigDecimal jahressummeRatenKalenderjahr; - private BigDecimal jahressummeRatenKreditjahr; - private BigDecimal summeRaten; + private BigDecimal jahressummeZinsenKalenderjahr = BigDecimal.ZERO; + private BigDecimal jahressummeZinsenKreditjahr = BigDecimal.ZERO; + private BigDecimal summeZinsen = BigDecimal.ZERO; + private BigDecimal jahressummeTilgungKalenderjahr = BigDecimal.ZERO; + private BigDecimal jahressummeTilgungKreditjahr = BigDecimal.ZERO; + private BigDecimal summeTilgung = BigDecimal.ZERO; + private BigDecimal jahressummeRatenKalenderjahr = BigDecimal.ZERO; + private BigDecimal jahressummeRatenKreditjahr = BigDecimal.ZERO; + private BigDecimal summeRaten = BigDecimal.ZERO; public static void main(String[] args) throws ParseException { @@ -186,22 +190,17 @@ class Darlehenberechner { laufzeitJahre = konfig.getLaufzeitJahre(); zinssatz = konfig.getZinssatz(); sondertilgung = konfig.getSondertilgung() != null ? konfig.getSondertilgung().multiply(konfig.getDarlehenswert()) : BigDecimal.ZERO; - summeMonate = 1; aktRestschuld = konfig.getDarlehenswert(); aktMonatlicheRate = konfig.getMonatlicheRate(); aktTilgungsfreieZeit = konfig.getaktTilgungsfreieZeit(); aktMonat = konfig.getAnfangsmonat(); - summeZinsen = BigDecimal.ZERO; - summeTilgung = BigDecimal.ZERO; - jahressummeRatenKalenderjahr = BigDecimal.ZERO; - jahressummeRatenKreditjahr = BigDecimal.ZERO; - summeRaten = BigDecimal.ZERO; } private void berechneWerte() { druckeUeberschrift(); - while ((laufzeitJahre == null || summeMonate < (laufzeitJahre * 12)) && aktRestschuld.signum() > 0) { + while (laufzeitNichtVorbei()) { + erhoeheSummeMonate(); zahleSondertilgung(); berechneBeitragAufteilung(); berechneRestschuld(); @@ -220,6 +219,21 @@ class Darlehenberechner { } + private boolean laufzeitNichtVorbei() { + return (laufzeitJahre == null || summeMonate < (laufzeitJahre * 12)) && aktRestschuld.signum() > 0; + } + + + private boolean laufzeitVorbei() { + return !laufzeitNichtVorbei(); + } + + + private void erhoeheSummeMonate() { + summeMonate++; + } + + private void zahleSondertilgung() { if (sondertilgung.signum() == 0) { return; @@ -254,7 +268,11 @@ class Darlehenberechner { private void berechneSummen() { + jahressummeZinsenKalenderjahr = jahressummeZinsenKalenderjahr.add(aktZinsbetrag); + jahressummeZinsenKreditjahr = jahressummeZinsenKreditjahr.add(aktZinsbetrag); summeZinsen = summeZinsen.add(aktZinsbetrag); + jahressummeTilgungKalenderjahr = jahressummeTilgungKalenderjahr.add(aktTilgungsbetrag); + jahressummeTilgungKreditjahr = jahressummeTilgungKreditjahr.add(aktTilgungsbetrag); summeTilgung = summeTilgung.add(aktTilgungsbetrag); jahressummeRatenKalenderjahr = jahressummeRatenKalenderjahr.add(aktMonatlicheRate); jahressummeRatenKreditjahr = jahressummeRatenKreditjahr.add(aktMonatlicheRate); @@ -263,28 +281,37 @@ class Darlehenberechner { private void druckeJahressumeBedingt() { - boolean kreditjahrVergangen = summeMonate > 1 && summeMonate % 12 == 0; + boolean kreditjahrVergangen = summeMonate > 1 && summeMonate % 12 == 0 || laufzeitVorbei(); if (kreditjahrVergangen || aktMonat.getMonth() == Month.DECEMBER) { + BigDecimal jahressummeZinsen; + BigDecimal jahressummeTilgung; BigDecimal jahressummeRaten; String desc; if (kreditjahrVergangen) { + jahressummeZinsen = jahressummeZinsenKreditjahr; + jahressummeTilgung = jahressummeTilgungKreditjahr; jahressummeRaten = jahressummeRatenKreditjahr; + jahressummeZinsenKreditjahr = BigDecimal.ZERO; + jahressummeTilgungKreditjahr = BigDecimal.ZERO; jahressummeRatenKreditjahr = BigDecimal.ZERO; desc = "Kreditjahr " + summeMonate / 12; } else { + jahressummeZinsen = jahressummeZinsenKalenderjahr; + jahressummeTilgung = jahressummeTilgungKalenderjahr; jahressummeRaten = jahressummeRatenKalenderjahr; + jahressummeZinsenKalenderjahr = BigDecimal.ZERO; + jahressummeTilgungKalenderjahr = BigDecimal.ZERO; jahressummeRatenKalenderjahr = BigDecimal.ZERO; desc = "Kalenderjahr " + aktMonat.getYear(); } - System.out.println("Summe " + desc + ":\n" + DECIMAL_FORMAT.format(jahressummeRaten) + " = " + DECIMAL_FORMAT.format(summeZinsen) + " + " - + DECIMAL_FORMAT.format(summeTilgung)); + System.out.println("Summe " + desc + ":\n" + DECIMAL_FORMAT.format(jahressummeRaten) + " = " + DECIMAL_FORMAT.format(jahressummeZinsen) + + " + " + DECIMAL_FORMAT.format(jahressummeTilgung)); } } private void aktualisiereZeitwerte() { aktMonat = aktMonat.plusMonths(1); - summeMonate++; if (aktTilgungsfreieZeit != null) { aktTilgungsfreieZeit--; }