- Trümmer in kleinere Methoden aufgeteilt
- Sondertilgungen eingebaut
This commit is contained in:
		@@ -12,11 +12,12 @@ class Darlehenberechner {
 | 
				
			|||||||
   private static final class Konfiguration {
 | 
					   private static final class Konfiguration {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      private BigDecimal darlehenswert;
 | 
					      private BigDecimal darlehenswert;
 | 
				
			||||||
      private BigDecimal zinssatzProzent;
 | 
					      private BigDecimal zinssatzReal;
 | 
				
			||||||
      private BigDecimal monatlicheRate;
 | 
					      private BigDecimal monatlicheRate;
 | 
				
			||||||
      private Integer laufzeitJahre;
 | 
					      private Integer laufzeitJahre;
 | 
				
			||||||
      private Integer tilgungsfreieZeit;
 | 
					      private Integer aktTilgungsfreieZeit;
 | 
				
			||||||
      private YearMonth anfangsmonat;
 | 
					      private YearMonth anfangsmonat;
 | 
				
			||||||
 | 
					      private BigDecimal sondertilgungReal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      public BigDecimal getDarlehenswert() {
 | 
					      public BigDecimal getDarlehenswert() {
 | 
				
			||||||
@@ -30,13 +31,13 @@ class Darlehenberechner {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      public BigDecimal getZinssatzProzent() {
 | 
					      public BigDecimal getZinssatz() {
 | 
				
			||||||
         return zinssatzProzent;
 | 
					         return zinssatzReal;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      public Konfiguration setZinssatzProzent(BigDecimal zinssatzProzent) {
 | 
					      public Konfiguration setZinssatzProzent(BigDecimal zinssatzProzent) {
 | 
				
			||||||
         this.zinssatzProzent = zinssatzProzent;
 | 
					         this.zinssatzReal = zinssatzProzent.divide(EINHUNDERT, MathContext.DECIMAL128);
 | 
				
			||||||
         return this;
 | 
					         return this;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,13 +64,13 @@ class Darlehenberechner {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      public Integer getTilgungsfreieZeit() {
 | 
					      public Integer getaktTilgungsfreieZeit() {
 | 
				
			||||||
         return tilgungsfreieZeit;
 | 
					         return aktTilgungsfreieZeit;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      public Konfiguration setTilgungsfreieZeit(Integer tilgungsfreieZeit) {
 | 
					      public Konfiguration setaktTilgungsfreieZeit(Integer aktTilgungsfreieZeit) {
 | 
				
			||||||
         this.tilgungsfreieZeit = tilgungsfreieZeit;
 | 
					         this.aktTilgungsfreieZeit = aktTilgungsfreieZeit;
 | 
				
			||||||
         return this;
 | 
					         return this;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -83,128 +84,223 @@ class Darlehenberechner {
 | 
				
			|||||||
         this.anfangsmonat = anfangsmonat;
 | 
					         this.anfangsmonat = anfangsmonat;
 | 
				
			||||||
         return this;
 | 
					         return this;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      public BigDecimal getSondertilgung() {
 | 
				
			||||||
 | 
					         return sondertilgungReal;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      public Konfiguration setSondertilgungProzent(BigDecimal sondertilgungProzent) {
 | 
				
			||||||
 | 
					         this.sondertilgungReal = sondertilgungProzent.divide(EINHUNDERT, MathContext.DECIMAL128);
 | 
				
			||||||
 | 
					         return this;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
 | 
					   private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
 | 
				
			||||||
   private static final BigDecimal ZWOELF = BigDecimal.valueOf(12);
 | 
					   private static final BigDecimal ZWOELF = BigDecimal.valueOf(12);
 | 
				
			||||||
 | 
					   private static final BigDecimal EINHUNDERT = BigDecimal.valueOf(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      public static void main(String[] args) throws ParseException {
 | 
					   private final Integer laufzeitJahre;
 | 
				
			||||||
         /*berechneWerte(new Konfiguration()
 | 
					   private final BigDecimal zinssatz;
 | 
				
			||||||
            .setDarlehenswert(BigDecimal.valueOf(168_000))
 | 
					   private BigDecimal sondertilgung;
 | 
				
			||||||
            .setZinssatzProzent(BigDecimal.valueOf(3.73))
 | 
					   private int summeMonate;
 | 
				
			||||||
            .setMonatlicheRate(BigDecimal.valueOf(1_500))
 | 
					   private BigDecimal aktRestschuld;
 | 
				
			||||||
            .setTilgungsfreieZeit(0)
 | 
					   private BigDecimal aktMonatlicheRate;
 | 
				
			||||||
            .setAnfangsmonat(YearMonth.of(2024, Month.SEPTEMBER)));
 | 
					   private BigDecimal aktZinsbetrag;
 | 
				
			||||||
         return;*/
 | 
					   private BigDecimal aktTilgungsbetrag;
 | 
				
			||||||
 | 
					   private Integer aktTilgungsfreieZeit;
 | 
				
			||||||
 | 
					   private YearMonth aktMonat;
 | 
				
			||||||
 | 
					   private BigDecimal summeZinsen;
 | 
				
			||||||
 | 
					   private BigDecimal summeTilgung;
 | 
				
			||||||
 | 
					   private BigDecimal jahressummeRatenKalenderjahr;
 | 
				
			||||||
 | 
					   private BigDecimal jahressummeRatenKreditjahr;
 | 
				
			||||||
 | 
					   private BigDecimal summeRaten;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         /*berechneWerte(new Konfiguration()
 | 
					 | 
				
			||||||
            .setDarlehenswert(BigDecimal.valueOf(168_000))
 | 
					 | 
				
			||||||
            .setZinssatzProzent(BigDecimal.valueOf(3.73))
 | 
					 | 
				
			||||||
            .setMonatlicheRate(BigDecimal.valueOf(1_500))
 | 
					 | 
				
			||||||
            .setTilgungsfreieZeit(0)
 | 
					 | 
				
			||||||
            .setLaufzeitJahre(11)
 | 
					 | 
				
			||||||
            .setAnfangsmonat(YearMonth.of(2024, Month.SEPTEMBER)));
 | 
					 | 
				
			||||||
         return;*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
         var konfig = new Konfiguration();
 | 
					   public static void main(String[] args) throws ParseException {
 | 
				
			||||||
         int count = 0;
 | 
					      new Darlehenberechner(new Konfiguration()
 | 
				
			||||||
         DECIMAL_FORMAT.setParseBigDecimal(true);
 | 
					         .setDarlehenswert(BigDecimal.valueOf(168_000))
 | 
				
			||||||
         while (count < args.length) {
 | 
					         .setZinssatzProzent(BigDecimal.valueOf(3.73))
 | 
				
			||||||
            String arg = args[count];
 | 
					         .setMonatlicheRate(BigDecimal.valueOf(1_500))
 | 
				
			||||||
            if (arg.equals("-hilfe")) {
 | 
					         .setaktTilgungsfreieZeit(0)
 | 
				
			||||||
               System.out.println("-darlehenswert 1000,00 -zinssatz 3,73 -monatlicheRate 30,00 -anfangsmonat 2024-09"
 | 
					         .setAnfangsmonat(YearMonth.of(2024, Month.SEPTEMBER))
 | 
				
			||||||
                  + "[-laufzeitJahre 11] [-tilgungsfreieZeit 5]");
 | 
					         .setSondertilgungProzent(BigDecimal.valueOf(2.5))
 | 
				
			||||||
            }
 | 
					      ).berechneWerte();
 | 
				
			||||||
            if (arg.equals("-darlehenswert")) {
 | 
					      return;
 | 
				
			||||||
               count++;
 | 
					
 | 
				
			||||||
               konfig.setDarlehenswert((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
					      /*new Darlehenberechner(new Konfiguration()
 | 
				
			||||||
            }
 | 
					         .setDarlehenswert(BigDecimal.valueOf(168_000))
 | 
				
			||||||
            if (arg.equals("-zinssatz")) {
 | 
					         .setZinssatzProzent(BigDecimal.valueOf(3.73))
 | 
				
			||||||
               count++;
 | 
					         .setMonatlicheRate(BigDecimal.valueOf(1_500))
 | 
				
			||||||
               konfig.setZinssatzProzent((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
					         .setaktTilgungsfreieZeit(0)
 | 
				
			||||||
            }
 | 
					         .setLaufzeitJahre(11)
 | 
				
			||||||
            if (arg.equals("-monatlicheRate")) {
 | 
					         .setAnfangsmonat(YearMonth.of(2024, Month.SEPTEMBER))
 | 
				
			||||||
               count++;
 | 
					      ).berechneWerte();
 | 
				
			||||||
               konfig.setMonatlicheRate((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
					      return;*/
 | 
				
			||||||
            }
 | 
					
 | 
				
			||||||
            if (arg.equals("-tilgungsfreieZeit")) {
 | 
					      /*var konfig = new Konfiguration();
 | 
				
			||||||
               count++;
 | 
					      int count = 0;
 | 
				
			||||||
               konfig.setTilgungsfreieZeit(Integer.parseInt(args[count]));
 | 
					      DECIMAL_FORMAT.setParseBigDecimal(true);
 | 
				
			||||||
            }
 | 
					      while (count < args.length) {
 | 
				
			||||||
            if (arg.equals("-laufzeitJahre")) {
 | 
					         String arg = args[count];
 | 
				
			||||||
               count++;
 | 
					         if (arg.equals("-hilfe")) {
 | 
				
			||||||
               konfig.setLaufzeitJahre(Integer.parseInt(args[count]));
 | 
					            System.out.println("-darlehenswert 1000,00 -zinssatz 3,73 -monatlicheRate 30,00 -anfangsmonat 2024-09"
 | 
				
			||||||
            }
 | 
					               + "[-laufzeitJahre 11] [-aktTilgungsfreieZeit 5]");
 | 
				
			||||||
            if (arg.equals("-anfangsmonat")) {
 | 
					 | 
				
			||||||
               count++;
 | 
					 | 
				
			||||||
               konfig.setAnfangsmonat(YearMonth.parse(args[count]));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            count++;
 | 
					 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
         berechneWerte(konfig);
 | 
					         if (arg.equals("-darlehenswert")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setDarlehenswert((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if (arg.equals("-zinssatz")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setZinssatzProzent((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if (arg.equals("-sondertilgung")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setSondertilgungProzent((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if (arg.equals("-monatlicheRate")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setMonatlicheRate((BigDecimal) DECIMAL_FORMAT.parse(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if (arg.equals("-aktTilgungsfreieZeit")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setaktTilgungsfreieZeit(Integer.parseInt(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if (arg.equals("-laufzeitJahre")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setLaufzeitJahre(Integer.parseInt(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if (arg.equals("-anfangsmonat")) {
 | 
				
			||||||
 | 
					            count++;
 | 
				
			||||||
 | 
					            konfig.setAnfangsmonat(YearMonth.parse(args[count]));
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         count++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      new Darlehenberechner(konfig).berechneWerte();*/
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private static void berechneWerte(Konfiguration konfig) {
 | 
					   private Darlehenberechner(Konfiguration konfig) {
 | 
				
			||||||
      BigDecimal zinssatzReal = konfig.getZinssatzProzent().divide(BigDecimal.valueOf(100), MathContext.DECIMAL128);
 | 
					      laufzeitJahre = konfig.getLaufzeitJahre();
 | 
				
			||||||
      BigDecimal monatlicheRate = konfig.getMonatlicheRate();
 | 
					      zinssatz = konfig.getZinssatz();
 | 
				
			||||||
      Integer laufzeitJahre = konfig.getLaufzeitJahre();
 | 
					      sondertilgung = konfig.getSondertilgung() != null ? konfig.getSondertilgung().multiply(konfig.getDarlehenswert()) : BigDecimal.ZERO;
 | 
				
			||||||
      Integer tilgungsfreieZeit = konfig.getTilgungsfreieZeit();
 | 
					      summeMonate = 1;
 | 
				
			||||||
      BigDecimal restschuld = konfig.getDarlehenswert();
 | 
					      aktRestschuld = konfig.getDarlehenswert();
 | 
				
			||||||
      YearMonth aktuellerMonat = konfig.getAnfangsmonat();
 | 
					      aktMonatlicheRate = konfig.getMonatlicheRate();
 | 
				
			||||||
      BigDecimal summeZinsen = BigDecimal.ZERO;
 | 
					      aktTilgungsfreieZeit = konfig.getaktTilgungsfreieZeit();
 | 
				
			||||||
      BigDecimal summeTilgung = BigDecimal.ZERO;
 | 
					      aktMonat = konfig.getAnfangsmonat();
 | 
				
			||||||
      BigDecimal jahressummeRatenKalenderjahr = BigDecimal.ZERO;
 | 
					      summeZinsen = BigDecimal.ZERO;
 | 
				
			||||||
      BigDecimal jahressummeRatenKreditjahr = BigDecimal.ZERO;
 | 
					      summeTilgung = BigDecimal.ZERO;
 | 
				
			||||||
      BigDecimal summeRaten = BigDecimal.ZERO;
 | 
					      jahressummeRatenKalenderjahr = BigDecimal.ZERO;
 | 
				
			||||||
      int laufzeitMonate = 0;
 | 
					      jahressummeRatenKreditjahr = BigDecimal.ZERO;
 | 
				
			||||||
      System.out.println("Monat:   Rate     = Zinsen + Tilgung| Restschuld");
 | 
					      summeRaten = BigDecimal.ZERO;
 | 
				
			||||||
      while ((laufzeitJahre == null || laufzeitMonate < (laufzeitJahre * 12)) && restschuld.signum() > 0) {
 | 
					   }
 | 
				
			||||||
         // berechne Beträge/ aktualisiere Restschuld
 | 
					
 | 
				
			||||||
         BigDecimal zinsbetrag = restschuld.multiply(zinssatzReal).divide(ZWOELF, MathContext.DECIMAL128);
 | 
					
 | 
				
			||||||
         if (monatlicheRate.compareTo(restschuld) > 0) {
 | 
					   private void berechneWerte() {
 | 
				
			||||||
            monatlicheRate = restschuld.add(zinsbetrag); // die letzte Rate ist gleich der Restschuld + Zinsen
 | 
					      druckeUeberschrift();
 | 
				
			||||||
         }
 | 
					      while ((laufzeitJahre == null || summeMonate < (laufzeitJahre * 12)) && aktRestschuld.signum() > 0) {
 | 
				
			||||||
         BigDecimal tilgungsbetrag = tilgungsfreieZeit != null && tilgungsfreieZeit > 0 ? BigDecimal.ZERO : monatlicheRate.subtract(zinsbetrag);
 | 
					         zahleSondertilgung();
 | 
				
			||||||
         restschuld = restschuld.subtract(tilgungsbetrag);
 | 
					         berechneBeitragAufteilung();
 | 
				
			||||||
         System.out.println(aktuellerMonat + ": " + DECIMAL_FORMAT.format(monatlicheRate) + " = " + DECIMAL_FORMAT.format(zinsbetrag)
 | 
					         berechneRestschuld();
 | 
				
			||||||
            + " + " + DECIMAL_FORMAT.format(tilgungsbetrag) + " | " + DECIMAL_FORMAT.format(restschuld));
 | 
					         druckeAktuelleMonatswerte();
 | 
				
			||||||
         // berechne Summen für Zusammenfassung
 | 
					         berechneSummen();
 | 
				
			||||||
         summeZinsen = summeZinsen.add(zinsbetrag);
 | 
					         druckeJahressumeBedingt();
 | 
				
			||||||
         summeTilgung = summeTilgung.add(tilgungsbetrag);
 | 
					         aktualisiereZeitwerte();
 | 
				
			||||||
         jahressummeRatenKalenderjahr = jahressummeRatenKalenderjahr.add(monatlicheRate);
 | 
					 | 
				
			||||||
         jahressummeRatenKreditjahr = jahressummeRatenKreditjahr.add(monatlicheRate);
 | 
					 | 
				
			||||||
         summeRaten = summeRaten.add(monatlicheRate);
 | 
					 | 
				
			||||||
         boolean kreditjahrVergangen = laufzeitMonate > 0 && laufzeitMonate % 11 == 0;
 | 
					 | 
				
			||||||
         if (kreditjahrVergangen || aktuellerMonat.getMonthValue() == 12) {
 | 
					 | 
				
			||||||
            BigDecimal jahressummeRaten;
 | 
					 | 
				
			||||||
            String desc;
 | 
					 | 
				
			||||||
            if (kreditjahrVergangen) {
 | 
					 | 
				
			||||||
               jahressummeRaten = jahressummeRatenKreditjahr;
 | 
					 | 
				
			||||||
               jahressummeRatenKreditjahr = BigDecimal.ZERO;
 | 
					 | 
				
			||||||
               desc = "Kreditjahr";
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
               jahressummeRaten = jahressummeRatenKalenderjahr;
 | 
					 | 
				
			||||||
               jahressummeRatenKalenderjahr = BigDecimal.ZERO;
 | 
					 | 
				
			||||||
               desc = "Kalenderjahr";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            System.out.println("Summe " + desc + ":\n" + DECIMAL_FORMAT.format(jahressummeRaten) + " = "
 | 
					 | 
				
			||||||
               + DECIMAL_FORMAT.format(summeZinsen) + " + " + DECIMAL_FORMAT.format(summeTilgung));
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         // aktualisiere Werte für den nächsten Lauf
 | 
					 | 
				
			||||||
         aktuellerMonat = aktuellerMonat.plusMonths(1);
 | 
					 | 
				
			||||||
         laufzeitMonate++;
 | 
					 | 
				
			||||||
         if (tilgungsfreieZeit != null) {
 | 
					 | 
				
			||||||
            tilgungsfreieZeit--;
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      // letzte Zusammenfassung
 | 
					      druckeFinaleSummen();
 | 
				
			||||||
      System.out.println("Summe:\n" + DECIMAL_FORMAT.format(summeRaten) + " = "
 | 
					      druckeLaufzeitUndRestschuld();
 | 
				
			||||||
         + DECIMAL_FORMAT.format(summeZinsen) + " + " + DECIMAL_FORMAT.format(summeTilgung));
 | 
					   }
 | 
				
			||||||
      // Ausgabe Laufzeit + Restschuld
 | 
					
 | 
				
			||||||
      laufzeitJahre = laufzeitJahre == null ? laufzeitMonate / 12 : laufzeitJahre;
 | 
					
 | 
				
			||||||
      int laufzeitMonateTeil = laufzeitMonate - (laufzeitJahre * 12);
 | 
					   private void druckeUeberschrift() {
 | 
				
			||||||
      System.out.println("Laufzeit: " + laufzeitJahre + " Jahre " + laufzeitMonateTeil + " Monate");
 | 
					      System.out.println("Monat:   Rate     = Zinsen + Tilgung| Restschuld");
 | 
				
			||||||
      System.out.println("Restschuld: " + DECIMAL_FORMAT.format(restschuld));
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void zahleSondertilgung() {
 | 
				
			||||||
 | 
					      if (sondertilgung.signum() == 0) {
 | 
				
			||||||
 | 
					         return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      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));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void berechneBeitragAufteilung() {
 | 
				
			||||||
 | 
					      aktZinsbetrag = aktRestschuld.multiply(zinssatz)
 | 
				
			||||||
 | 
					         .divide(ZWOELF, MathContext.DECIMAL128);
 | 
				
			||||||
 | 
					      if (aktMonatlicheRate.compareTo(aktRestschuld) > 0) {
 | 
				
			||||||
 | 
					         aktMonatlicheRate = aktRestschuld.add(aktZinsbetrag); // die letzte Rate ist gleich der Restschuld + Zinsen
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      aktTilgungsbetrag = aktTilgungsfreieZeit != null && aktTilgungsfreieZeit > 0 ? BigDecimal.ZERO : aktMonatlicheRate.subtract(aktZinsbetrag);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void berechneRestschuld() {
 | 
				
			||||||
 | 
					      aktRestschuld = aktRestschuld.subtract(aktTilgungsbetrag);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void druckeAktuelleMonatswerte() {
 | 
				
			||||||
 | 
					      System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(aktMonatlicheRate) + " = " + DECIMAL_FORMAT.format(aktZinsbetrag)
 | 
				
			||||||
 | 
					            + " + " + DECIMAL_FORMAT.format(aktTilgungsbetrag) + " | " + DECIMAL_FORMAT.format(aktRestschuld));
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void berechneSummen() {
 | 
				
			||||||
 | 
					      summeZinsen = summeZinsen.add(aktZinsbetrag);
 | 
				
			||||||
 | 
					      summeTilgung = summeTilgung.add(aktTilgungsbetrag);
 | 
				
			||||||
 | 
					      jahressummeRatenKalenderjahr = jahressummeRatenKalenderjahr.add(aktMonatlicheRate);
 | 
				
			||||||
 | 
					      jahressummeRatenKreditjahr = jahressummeRatenKreditjahr.add(aktMonatlicheRate);
 | 
				
			||||||
 | 
					      summeRaten = summeRaten.add(aktMonatlicheRate);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void druckeJahressumeBedingt() {
 | 
				
			||||||
 | 
					      boolean kreditjahrVergangen = summeMonate > 1 && summeMonate % 12 == 0;
 | 
				
			||||||
 | 
					      if (kreditjahrVergangen || aktMonat.getMonth() == Month.DECEMBER) {
 | 
				
			||||||
 | 
					         BigDecimal jahressummeRaten;
 | 
				
			||||||
 | 
					         String desc;
 | 
				
			||||||
 | 
					         if (kreditjahrVergangen) {
 | 
				
			||||||
 | 
					            jahressummeRaten = jahressummeRatenKreditjahr;
 | 
				
			||||||
 | 
					            jahressummeRatenKreditjahr = BigDecimal.ZERO;
 | 
				
			||||||
 | 
					            desc = "Kreditjahr " + summeMonate / 12;
 | 
				
			||||||
 | 
					         } else {
 | 
				
			||||||
 | 
					            jahressummeRaten = jahressummeRatenKalenderjahr;
 | 
				
			||||||
 | 
					            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));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void aktualisiereZeitwerte() {
 | 
				
			||||||
 | 
					      aktMonat = aktMonat.plusMonths(1);
 | 
				
			||||||
 | 
					      summeMonate++;
 | 
				
			||||||
 | 
					      if (aktTilgungsfreieZeit != null) {
 | 
				
			||||||
 | 
					         aktTilgungsfreieZeit--;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void druckeFinaleSummen() {
 | 
				
			||||||
 | 
					      System.out.println("Summe:\n" + DECIMAL_FORMAT.format(summeRaten) + " = " + DECIMAL_FORMAT.format(summeZinsen)
 | 
				
			||||||
 | 
					         + " + " + DECIMAL_FORMAT.format(summeTilgung));
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   private void druckeLaufzeitUndRestschuld() {
 | 
				
			||||||
 | 
					      int laufzeitJahreFinal = laufzeitJahre == null ? summeMonate / 12 : laufzeitJahre;
 | 
				
			||||||
 | 
					      int teillaufzeitMonateFinal = summeMonate - (laufzeitJahreFinal * 12);
 | 
				
			||||||
 | 
					      System.out.println("Laufzeit: " + laufzeitJahreFinal + " Jahre " + teillaufzeitMonateFinal + " Monate");
 | 
				
			||||||
 | 
					      System.out.println("Restschuld: " + DECIMAL_FORMAT.format(aktRestschuld));
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user