Ich habe folgendes programmiert:
Und das ist die GUI - Klasse:
Das Problem ist, dass die Sondertilgung ab dem 13. Monat, immer abgezogen wird, sie soll aber nur in den Monaten die durch 12 teilbar sind (12. Monat, 24. Monat usw.) abgezogen werden. Wie programmiere ich den Modulo so?
Eingabedaten:
Kreditsumme: 100000
monatliche Zahlung: 1000
Laufzeit in Jahren: 2
jährlich 5 % Sondertilgung: ja
Java:
/**
*
* Beschreibung
*
* @version 1.0 vom 29.01.2018
* @author
*/
public class Berechnungen {
// Anfang Attribute
// Ende Attribute
public Berechnungen() {
}
// Anfang Methoden
public double bestimmeZinssatz(double kreditbetrag, int laufzeit) {
double zinssatz = 0.0;
double realzins = 0.0;
if (laufzeit >= 16)
{
zinssatz = 2.5;
} else
{
if (laufzeit > 10)
{
zinssatz = 2.0;
} else
{
if (laufzeit > 5)
{
zinssatz = 1.5;
} else
{
zinssatz = 1.0;
} // end of if-else
} // end of if-else
} // end of if-else
if (kreditbetrag < 80000) {
realzins = zinssatz + 0.2;
} else {
realzins = zinssatz;
} // end of if-else
return realzins;
}
public String fuellenAusgabefeld(double kreditbetrag, double annuitaet, int laufzeit, boolean sonderzahlung) {
//lokale Variablen
double anfangsschuld = kreditbetrag;
String ausgabefeld = "";
String ausgabe = "";
int dauer = laufzeit * 12;
double sondertilgung = 0.0;
double endschuld = 0.0;
double betrag = annuitaet;
//Berechnungen
for (int i = 1;i <= dauer;i++ ) {
double zins = (anfangsschuld * (this.bestimmeZinssatz(kreditbetrag, laufzeit)/100/12));
double zinsen = Math.round(100.0 * zins)/100.0;
double tilgung = Math.round(100.0 * (betrag - zinsen))/100.0;
if (sonderzahlung == true)
{
if (i % 12 == 0)
{
sondertilgung = kreditbetrag * 0.05;
} // end of if
} else
{
sondertilgung = 0.0;
} // end of if-else
endschuld = anfangsschuld - tilgung - sondertilgung;
ausgabefeld =" Anfangsschuld: "+Math.round(100.0 * anfangsschuld)/100.0+" € Zinsen: "+zinsen+" € Tilgung: "+tilgung+" € Sondertilgung: "+sondertilgung+" € Endschuld: "+Math.round(100.0* endschuld)/100.0+" €\n";
anfangsschuld = endschuld;
ausgabe = ausgabe + "Monat: "+i+ ausgabefeld;
} // end of for
String text = ausgabe;
return text;
}
// Ende Methoden
} // end of Berechnungen
Und das ist die GUI - Klasse:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
*
* Beschreibung
*
* @version 1.0 vom 29.01.2018
* @author
*/
public class Kreditrechner extends JFrame {
// Anfang Attribute
private JLabel jLabel1 = new JLabel();
private JLabel jLabel2 = new JLabel();
private JLabel jLabel3 = new JLabel();
private JLabel jLabel4 = new JLabel();
private JLabel jLabel5 = new JLabel();
private JTextField jTextField1 = new JTextField();
private JTextField jTextField2 = new JTextField();
private JTextField jTextField3 = new JTextField();
private JCheckBox jCheckBox1 = new JCheckBox();
private JTextArea jTextArea1 = new JTextArea("");
private JScrollPane jTextArea1ScrollPane = new JScrollPane(jTextArea1);
private JButton jButton1 = new JButton();
// Ende Attribute
public Kreditrechner(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 1220;
int frameHeight = 569;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
jLabel1.setBounds(495, 0, 228, 57);
jLabel1.setText("Kreditrechner");
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setFont(new Font("Arial Narrow", Font.BOLD + Font.ITALIC, 24));
cp.add(jLabel1);
jLabel2.setBounds(8, 72, 147, 35);
jLabel2.setText("Kreditsumme in Euro:");
cp.add(jLabel2);
jLabel3.setBounds(336, 72, 160, 35);
jLabel3.setText("monatliche Zahlung in Euro:");
cp.add(jLabel3);
jLabel4.setBounds(672, 72, 147, 35);
jLabel4.setText("Laufzeit in Jahren:");
cp.add(jLabel4);
jLabel5.setBounds(1048, 72, 150, 35);
jLabel5.setText("jährlich 5 % Sondertilgung");
cp.add(jLabel5);
jTextField1.setBounds(152, 72, 147, 35);
cp.add(jTextField1);
jTextField2.setBounds(496, 72, 147, 35);
cp.add(jTextField2);
jTextField3.setBounds(824, 72, 147, 35);
cp.add(jTextField3);
jCheckBox1.setBounds(1016, 72, 20, 35);
jCheckBox1.setText("");
jCheckBox1.setOpaque(false);
cp.add(jCheckBox1);
jTextArea1ScrollPane.setBounds(16, 120, 945, 401);
cp.add(jTextArea1ScrollPane);
jButton1.setBounds(1016, 120, 185, 41);
jButton1.setText("Berechnung durchführen");
jButton1.setMargin(new Insets(2, 2, 2, 2));
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton1_ActionPerformed(evt);
}
});
cp.add(jButton1);
// Ende Komponenten
setVisible(true);
} // end of public Kreditrechner
// Anfang Methoden
public static void main(String[] args) {
new Kreditrechner("Kreditrechner");
} // end of main
public void jButton1_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
// Auslesen und Deklaration
double kreditbetrag = Double.parseDouble(this.jTextField1.getText());
double annuitaet = Double.parseDouble(this.jTextField2.getText());
int laufzeit = Integer.parseInt(this.jTextField3.getText());
// lokale Variablen
boolean sonderzahlung;
String ausgabe;
// Checkbox
if (this.jCheckBox1.isSelected()) {
sonderzahlung = true;
} else {
sonderzahlung = false;
} // end of if-else
// Klassenaufruf
Berechnungen x = new Berechnungen();
ausgabe = x.fuellenAusgabefeld(kreditbetrag, annuitaet, laufzeit, sonderzahlung);
// end of jButton1_ActionPerformed
this.jTextArea1.setText(ausgabe);
// Ende Methoden
}
} // end of class Kreditrechner
Das Problem ist, dass die Sondertilgung ab dem 13. Monat, immer abgezogen wird, sie soll aber nur in den Monaten die durch 12 teilbar sind (12. Monat, 24. Monat usw.) abgezogen werden. Wie programmiere ich den Modulo so?
Eingabedaten:
Kreditsumme: 100000
monatliche Zahlung: 1000
Laufzeit in Jahren: 2
jährlich 5 % Sondertilgung: ja