diff --git a/Darlehenberechner.java b/Darlehenberechner.java index 7e80057..170a261 100644 --- a/Darlehenberechner.java +++ b/Darlehenberechner.java @@ -16,8 +16,8 @@ class Darlehenberechner { private BigDecimal darlehenswert; private BigDecimal zinssatzReal; private BigDecimal monatlicheRate; - private Integer laufzeitJahre; - private Integer aktTilgungsfreieZeit; + private Integer laufzeitMonate; + private Integer tilgungsfreieZeit; private YearMonth anfangsmonat; private BigDecimal sondertilgungReal; @@ -55,13 +55,19 @@ class Darlehenberechner { } - public Integer getLaufzeitJahre() { - return laufzeitJahre; + public Integer getLaufzeitMonate() { + return laufzeitMonate; } - public Konfiguration setLaufzeitJahre(Integer laufzeitJahre) { - this.laufzeitJahre = laufzeitJahre; + public Konfiguration setLaufzeitMonate(Integer laufzeitMonate) { + this.laufzeitMonate = laufzeitMonate; + return this; + } + + + public Konfiguration setLaufzeit(Integer jahre, Integer monate) { + this.laufzeitMonate = (jahre * 12) + monate; return this; } @@ -103,7 +109,7 @@ class Darlehenberechner { private static final BigDecimal ZWOELF = BigDecimal.valueOf(12); private static final BigDecimal EINHUNDERT = BigDecimal.valueOf(100); - private final Integer laufzeitJahre; + private final Integer laufzeitMonate; private final BigDecimal zinssatz; private BigDecimal sondertilgung; private int summeMonate = 0; @@ -153,15 +159,16 @@ class Darlehenberechner { konfig.setZinssatzProzent((BigDecimal) DECIMAL_FORMAT.parse(dis.readLine())); System.out.print("Monatliche Rate: "); konfig.setMonatlicheRate((BigDecimal) DECIMAL_FORMAT.parse(dis.readLine())); - System.out.print("Laufzeit in Jahren(optional): "); - var in = dis.readLine(); + System.out.print("Laufzeit in Jahren(optional Jahre:Monate): "); + String in = dis.readLine(); if (in != null && !in.isBlank()) { - konfig.setLaufzeitJahre(Integer.parseInt(dis.readLine())); + String[] split = in.split(":"); + konfig.setLaufzeit(Integer.parseInt(split[0]), Integer.parseInt(split[1])); } System.out.print("Anzahl tilgungsfreier Monate(optional): "); in = dis.readLine(); if (in != null && !in.isBlank()) { - konfig.setTilgungsfreieZeit(Integer.parseInt(dis.readLine())); + konfig.setTilgungsfreieZeit(Integer.parseInt(in)); } System.out.print("Monat erste Rate(z.B. 2007-12): "); konfig.setAnfangsmonat(YearMonth.parse(dis.readLine())); @@ -216,7 +223,7 @@ class Darlehenberechner { private Darlehenberechner(Konfiguration konfig) { - laufzeitJahre = konfig.getLaufzeitJahre(); + laufzeitMonate = konfig.getLaufzeitMonate(); zinssatz = konfig.getZinssatz(); sondertilgung = konfig.getSondertilgung() != null ? konfig.getSondertilgung().multiply(konfig.getDarlehenswert()) : BigDecimal.ZERO; aktRestschuld = konfig.getDarlehenswert(); @@ -249,7 +256,7 @@ class Darlehenberechner { private boolean laufzeitNichtVorbei() { - return (laufzeitJahre == null || summeMonate < (laufzeitJahre * 12)) && aktRestschuld.signum() > 0; + return laufzeitMonate != null ? summeMonate < laufzeitMonate : aktRestschuld.signum() > 0; } @@ -323,7 +330,7 @@ class Darlehenberechner { jahressummeZinsenKreditjahr = BigDecimal.ZERO; jahressummeTilgungKreditjahr = BigDecimal.ZERO; jahressummeRatenKreditjahr = BigDecimal.ZERO; - desc = "Kreditjahr " + summeMonate / 12; + desc = "Kreditjahr " + (summeMonate + 11) / 12; // + 11 weil integerdivision und X Jahre plus 1 Monat soll X + 1 tes Kreditjahr ergeben } else { jahressummeZinsen = jahressummeZinsenKalenderjahr; jahressummeTilgung = jahressummeTilgungKalenderjahr; @@ -354,8 +361,8 @@ class Darlehenberechner { private void druckeLaufzeitUndRestschuld() { - int laufzeitJahreFinal = laufzeitJahre == null ? summeMonate / 12 : laufzeitJahre; - int teillaufzeitMonateFinal = summeMonate - (laufzeitJahreFinal * 12); + int laufzeitJahreFinal = summeMonate / 12; + int teillaufzeitMonateFinal = summeMonate % 12; System.out.println("Laufzeit: " + laufzeitJahreFinal + " Jahre " + teillaufzeitMonateFinal + " Monate"); System.out.println("Restschuld: " + DECIMAL_FORMAT.format(aktRestschuld)); }