# Kreditrechner programmieren



## diesamy (20. Mai 2012)

Hallo ihr lieben,

ich sitze jetzt schon eine ganze Weile an dem Problem einen Kreditrechner zu programmieren jedoch ohne Erfolg, deswegen habe ich mich jetzt erstmal auf ein Problem bezogen : die Restschuld zu berrechnen. 

Das Layot war nicht das große Problem, der Rechenweg auch nicht, aber wie & wo bringe ich das alles zusammen :/ Brauche ich "Strings" zum speichern ? 
Habe unten mal als Kommentar meinen Rechenweg eingefügt. Helft mir bitte :noe:


```
import java.applet.*;
 import java.awt.*; 
public class Restschuld extends Applet implements ActionListener{



String[] beschriftung = {"Kreditsumme", "monatliche Rate", "Zinssatz in % p.A.", "Laufzeit in Monaten","Restschuld"};
Choice ch = new Choice();
  TextField Kreditsumme = new TextField("",7);
  TextField monatlicheRate = new TextField ("",4);
  TextField Zinssatz = new TextField("",3);
  TextField Laufzeit = new TextField ("",2);
  Label Restschuld = new Label ("_________________");
  Button a = new Button ("Berechne Restschuld");
  a.addActinListener(this);
  
  
   public void init() {

     Label[] l = new Label[beschriftung.length];
     for (int i=0 ; i < beschriftung.length;i++){
        l[i] =  new Label(beschriftung[i]);
     }
 
	 
	Panel[] p = new Panel[2];
    Panel maske = new Panel();
maske.setBackground(Color.ORANGE);
		maske.setLayout(new GridLayout(0, 1));


     p[0] = new Panel();
     p[0].setLayout(new GridLayout(0,2));
     p[0].add(l[0]);
     p[0].add(Kreditsumme);
     p[0].add(l[1]);
     p[0].add(monatlicheRate);
	 p[0].add(l[2]);
	 p[0].add(Zinssatz);
	 p[0].add(l[3]);
     p[0].add(Laufzeit);
     p[0].add(a);
	 maske.add(p[0]);
	
	p[1]= new Panel();
	p[1].setLayout(new GridLayout(0,2));
	p[1].add(l[4]);
	p[1].add(Restschuld);
	maske.add(p[1]);

	
	 
	 add (maske);
     
}
public void actionPerformed(ActionEvent e){



// Kreditsumme+(Kreditsumme/100*Zinssatz)/12-monatlicheRate

for ( int i =1; Kreditsumme > 0; i++)  //


}
```


----------



## julian.veh (20. Mai 2012)

Wenn ich das richtig sehe hast du bis jetzt nur das Layout? 
Vllt solltest du als erstes deine TextFelder auslesen und die Eingaben in Variablen speichern?


----------



## AquaBall (20. Mai 2012)

Da fehlt ja noch einiges, ist so noch nichtmal kompilierfähig.

Hast du schon mal ein HelloWorld zu Laufen gebracht? 
Wenn Ja, dann setz doch dort mal an, und bau Schritt für Schritt weiter.
Wenn Nein, dann mach das erstmal, damit du ein bisschen ein Gefühl wenigstens dafür bekommst, was du uns fragen willst.

Mach mal ein HelloWorld.


----------



## julian.veh (20. Mai 2012)

Und: Bezeichner wie Kreditsumme, Zinssatz und Laufzeit schreibt man klein


----------



## diesamy (20. Mai 2012)

genau da liegt mein Problem, dazu verwende ich doch die Methode 

eingabe.getText() 

jedoch ermittelt die den Text aus einem Textfeld & ich habe doch mehrere :/


----------



## julian.veh (20. Mai 2012)

Deine Textfelder haben alle einen Bezeichner. Als Bsp.: 


```
TextField Kreditsumme = new TextField("",7);
```

Hier ist der Bezeichner Kreditsumme. Bezeichner werden übrigens, wie gerade schon gesagt, klein geschrieben:


```
TextField kreditsumms = new Textfield(",7);
```

um nun den Inhalt auszulesen


```
String kreditsummeS = kreditsumms.getText();
```

Das ganze brauchst du dann noch als Zahl um damit rechnen zu können 


```
int kreditsummeI = Integer.parseInt(kreditsummeS);
```

Hilft dir das weiter?


----------



## diesamy (20. Mai 2012)

Super danke  im Buch wird das alles sehr seltsam erklärt - ich danke dir


----------



## AquaBall (20. Mai 2012)

julian.veh hat gesagt.:


> Deine Textfelder haben alle einen Bezeichner ...
> ... um nun den Inhalt auszulesen
> 
> 
> ...



Schön das einer wenigstens die Frage verstanden hat. Mir war 


> wo bringe ich das alles zusammen


einfach zu "groß".

Kompliment!


----------



## diesamy (20. Mai 2012)

Sooo jetzt hat er trotzdem noch ein Problem mit meinem Action Listener, in meinem Buch wird der Knopf immer direkt im Anschluss an den Actionlistener hinzugefügt - muss ich das auch tun ? 


```
import java.applet.*;
 import java.awt.*; 
public class Restschuld extends Applet implements ActionListener{



String[] beschriftung = {"Kreditsumme", "monatliche Rate", "Zinssatz in % p.A.", "Laufzeit in Monaten","Restschuld"};

String kreditsummeS; 
String monatlicherateS;
String zinssatzS ;
String laufzeitS;
  
  TextField kreditsumme = new TextField("",7);
  TextField monatlicherate = new TextField ("",4);
  TextField zinssatz = new TextField("",3);
  TextField laufzeit = new TextField ("",2);
  Label restschuld = new Label ("_________________");
  Button a = new Button ("Berechne Restschuld");
  a.addActionListener(this);
 
  
  
  
   public void init() {

     Label[] l = new Label[beschriftung.length];
     for (int i=0 ; i < beschriftung.length;i++){
        l[i] =  new Label(beschriftung[i]);
     }
 
	 
	Panel[] p = new Panel[2];
    Panel maske = new Panel();
maske.setBackground(Color.ORANGE);
		maske.setLayout(new GridLayout(0, 1));


     p[0] = new Panel();
     p[0].setLayout(new GridLayout(0,2));
     p[0].add(l[0]);
     p[0].add(Kreditsumme);
     p[0].add(l[1]);
     p[0].add(monatlicheRate);
	 p[0].add(l[2]);
	 p[0].add(Zinssatz);
	 p[0].add(l[3]);
     p[0].add(Laufzeit);
     p[0].add(a);
	 maske.add(p[0]);
	
	p[1]= new Panel();
	p[1].setLayout(new GridLayout(0,2));
	p[1].add(l[4]);
	p[1].add(Restschuld);
	maske.add(p[1]);

	
	 
	 add (maske);
     
}
public void actionPerformed(ActionEvent e){

String kreditsummeS = kreditsumme.getText();
String monatlicherateS = monatlicherate.getText(); 
String zinssatzS = zinssatz.getText();
String laufzeitS = laufzeit.getText();


int kreditsummeI = Integer.parseInt (kreditsummeS);
int monatlicherateI = Integer.parseInt (monatlicherateS);
int zinssatzI = Integer.parseInt (zinssatzS);
int laufzeitI = Integer.parseInt (laufzeitS);


restschuld =  kreditsummeI +( kreditsummeI/100 * zinssatzI) /12 - monatlicheRateI;

restschuld.setText ("Restschuld: " + Restschuld);

}




}
```


----------



## jgh (20. Mai 2012)

Wann du dem ActionListener addest ist relativ egal, aber wo du ihn addest...das ist ein Problem bei dir. 

du darfst außer initialisieren und/oder deklarieren von Variablen, kein Code einfach in die Klasse schreiben, sondern immer in eine Methode. Wenn du also dein 

[java=20]a.addActionListener(this);[/code]
in die init-Methode schreibst...sollte es klappen

[java=25]   public void init() {

a.addActionListener(this);
//...[/code]


----------



## diesamy (20. Mai 2012)

aha  danke für die tollen Hilfen hier


----------



## diesamy (20. Mai 2012)

Restschuld.java:3: cannot find symbol
symbol: class ActionListener
public class Restschuld extends Applet implements ActionListener{
                                                  ^
Restschuld.java:65: cannot find symbol
symbol  : class ActionEvent
location: class Restschuld
public void actionPerformed(ActionEvent e){
                            ^
Restschuld.java:27: addActionListener(java.awt.event.ActionListener) in java.awt.Button cannot be applied to (Restschuld)
     a.addActionListener(this);
      ^
Restschuld.java:79: incompatible types
found   : int
required: java.awt.Label
restschuld =  kreditsummeI +( kreditsummeI/100 * zinssatzI) /12 - monatlicherateI;
                                                                ^



 jetzt bekomme ich nur noch fehlermeldungen


----------



## jgh (20. Mai 2012)

du wirst noch viel mehr Fehlermeldungen bekommen 
aber unten mal eine compilierfähige Version DEINES Codes.
Überleg aber auch mal, warum man evtl. statt int´s (Ganzzahlen) evtl. lieber double (Gleitkommazahlen) im Kontext von Kreditrechnern benutzen könnte....


```
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Restschuld extends Applet implements ActionListener {

	String[] beschriftung = { "Kreditsumme", "monatliche Rate",
			"Zinssatz in % p.A.", "Laufzeit in Monaten", "Restschuld" };

	String kreditsummeS;
	String monatlicherateS;
	String zinssatzS;
	String laufzeitS;

	TextField kreditsumme = new TextField("", 7);
	TextField monatlicheRate = new TextField("", 4);
	TextField zinssatz = new TextField("", 3);
	TextField laufzeit = new TextField("", 2);
	Label restschuld = new Label("_________________");
	Button a = new Button("Berechne Restschuld");

	public void init() {
		a.addActionListener(this);
		Label[] l = new Label[beschriftung.length];
		for (int i = 0; i < beschriftung.length; i++) {
			l[i] = new Label(beschriftung[i]);
		}

		Panel[] p = new Panel[2];
		Panel maske = new Panel();
		maske.setBackground(Color.ORANGE);
		maske.setLayout(new GridLayout(0, 1));

		p[0] = new Panel();
		p[0].setLayout(new GridLayout(0, 2));
		p[0].add(l[0]);
		p[0].add(kreditsumme);
		p[0].add(l[1]);
		p[0].add(monatlicheRate);
		p[0].add(l[2]);
		p[0].add(zinssatz);
		p[0].add(l[3]);
		p[0].add(laufzeit);
		p[0].add(a);
		maske.add(p[0]);

		p[1] = new Panel();
		p[1].setLayout(new GridLayout(0, 2));
		p[1].add(l[4]);
		p[1].add(restschuld);
		maske.add(p[1]);

		add(maske);

	}

	public void actionPerformed(ActionEvent e) {

		String kreditsummeS = kreditsumme.getText();
		String monatlicherateS = monatlicheRate.getText();
		String zinssatzS = zinssatz.getText();
		String laufzeitS = laufzeit.getText();

		int kreditsummeI = Integer.parseInt(kreditsummeS);
		int monatlicherateI = Integer.parseInt(monatlicherateS);
		int zinssatzI = Integer.parseInt(zinssatzS);
		int laufzeitI = Integer.parseInt(laufzeitS);

		int restSchuld = kreditsummeI + (kreditsummeI / 100 * zinssatzI) / 12
				- monatlicherateI;

		restschuld.setText("Restschuld: " + restSchuld);

	}

}
```


----------



## diesamy (20. Mai 2012)

ok mit double wäre das natürlich sinnvoller - aber muss ich oben all das importieren?  das hab ich noch niee gesehn :/


----------



## julian.veh (20. Mai 2012)

Nein, wenn dir der speicher egal ist reicht es wenn du 


```
import import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
```

importierst 

Wobei ja, du musst alles importieren, aber .* bedeutet du importierst ALLES aus dem Paket . Deswegen ist es weniger.

Allerdings ist es meistens einfach von deiner IDE importieren zu lassen.

Nutzt du vllt Netbeans oder Eclipse?


----------



## Camill (20. Mai 2012)

julian.veh hat gesagt.:


> Nein, wenn dir der speicher egal ist reicht es wenn du
> 
> 
> ```
> ...



Was Bitteschön hat das denn mit dem "Speicher" zu tun?


----------



## julian.veh (20. Mai 2012)

Camill hat gesagt.:


> Was Bitteschön hat das denn mit dem "Speicher" zu tun?



Ist es nicht so, dass alles was man importiert in den Ram geladen wird?
Wenn das nicht stimmt, tuts mir leid


----------



## jgh (20. Mai 2012)

ne, du hast mit Wildcard [c]*[/c] importiert. Grundsätzlich ist es guter Stil, nur das zu importieren, was man wirklich braucht...und mit einer IDE ist es eine Tastenkombination.

bevor du weitermachst, noch ein paar Hinweise...:
die hier definierten Variablen 

    String kreditsummeS;
    String monatlicherateS;
    String zinssatzS;
    String laufzeitS;

```
public class Restschuld extends Applet implements ActionListener {
 
    String[] beschriftung = { "Kreditsumme", "monatliche Rate",
            "Zinssatz in % p.A.", "Laufzeit in Monaten", "Restschuld" };
 
    String kreditsummeS;
    String monatlicherateS;
    String zinssatzS;
    String laufzeitS;
 ...
```
werden innerhalb  actionPerformed nochmals deklariert und somit nicht genutzt. willst du die am Anfang definierten Variablen nutzen, dann musst du wie bei [c]kreditsummeS[/c] verfahren.


```
public void actionPerformed(ActionEvent e) {

		kreditsummeS = kreditsumme.getText();
		String monatlicherateS = monatlicheRate.getText();
		String zinssatzS = zinssatz.getText();
		String laufzeitS = laufzeit.getText();

		int kreditsummeI = Integer.parseInt(kreditsummeS);
		int monatlicherateI = Integer.parseInt(monatlicherateS);
		int zinssatzI = Integer.parseInt(zinssatzS);
		int laufzeitI = Integer.parseInt(laufzeitS);

		int restSchuld = kreditsummeI + (kreditsummeI / 100 * zinssatzI) / 12
				- monatlicherateI;

		restschuld.setText("Restschuld: " + restSchuld);

	}
```

[edit]Das Importieren bewirkt nur, dass ich bspw ein [c]TextField [/c] mit [c]TextField tf = new TextField ()[/c] im Code benutzen kann, ansonsten muss man [c]java.awt.TextField kreditsumme = new java.awt.TextField("", 7);[/c]schreiben.
Mit Speicherverbrauch hat es nichts zu tun, sondern nur wie eine Klasse im Code "angesprochen" werden kann.[/edit]


----------



## Camill (20. Mai 2012)

julian.veh hat gesagt.:


> Ist es nicht so, dass alles was man importiert in den Ram geladen wird?
> Wenn das nicht stimmt, tuts mir leid



Nein...die Klassen werden erst zur Laufzeit von der JVM geladen. Somit macht es keinen Unterschied ob jede Klasse einzeln importiert wird oder das ganze durch ein .* abgekürzt wird.


----------



## julian.veh (20. Mai 2012)

Camill hat gesagt.:


> Nein...die Klassen werden erst zur Laufzeit von der JVM geladen. Somit macht es keinen Unterschied ob jede Klasse einzeln importiert wird oder das ganze durch ein .* abgekürzt wird.




Okay, dann hatte ich das falsch in Erinnerung, auf jeden Fall hat mir jemand gesagt, es ist besser alles einzeln zu importieren und den Grund habe ich vergessen ^^.


----------



## Camill (20. Mai 2012)

Ein Grund den viele als Vorteil sehen ist der das man schon zu Anfang sieht welche Klassen benutzt werden, weitere Vorteile kenne ich jedoch auch nicht.


----------



## diesamy (3. Jun 2012)

Habe noch ein Problem & zwar habe ich das ganze Konzept nun auf Laufzeitberechnung umgestellt - leider zählt die Schleife irgendwas nur nciht das was sie soll :

& Brauche ich in der Methode public void init - das Label l ?? 








```
import java.applet.*;
 import java.awt.*; 
 import java.awt.event.*;
 
public class Laufzeit extends Applet implements ActionListener{



String[] beschriftung = {"Kreditsumme", "monatliche Rate", "Zinssatz in % p.A.", "Laufzeit"};

String kreditsummeS; 
String monatlicherateS;
String zinssatzS ;

  
  TextField kreditsumme = new TextField("",7);
  TextField monatlicherate = new TextField ("",4);
  TextField zinssatz = new TextField("",3);
  Label laufzeit =new Label ("");
  Button a = new Button ("Berechne Laufzeit");
  int n = 0;
 
  
  
  
   public void init() {

     a.addActionListener(this);
     
	 Label[] l = new Label[beschriftung.length];
     for (int i=0 ; i < beschriftung.length;i++){
        l[i] =  new Label(beschriftung[i]);
     }
 
	 
	Panel[] p = new Panel[3];
    Panel maske = new Panel();
    maske.setBackground(Color.ORANGE);
		maske.setLayout(new GridLayout(0,1));


     p[0] = new Panel();
     p[0].setLayout(new GridLayout(0,2));
     p[0].add(l[0]);
     p[0].add(kreditsumme);
     p[0].add(l[1]);
     p[0].add(monatlicherate);
	 p[0].add(l[2]);
	 p[0].add(zinssatz);
     p[0].add(a);
	 maske.add(p[0]);
	
	p[1]= new Panel();
	p[1].setLayout(new GridLayout(0,2));
	p[1].add(l[3]);
	p[1].add(laufzeit);
	maske.add(p[1]);

	
	 
	 add (maske);
     
}
public void actionPerformed(ActionEvent e){

kreditsummeS = kreditsumme.getText();
monatlicherateS = monatlicherate.getText(); 
zinssatzS = zinssatz.getText();



double kreditsumme = Double.valueOf(kreditsummeS).doubleValue();
double monatlicherate = Double.valueOf(monatlicherateS).doubleValue();
double zinssatz = Double.valueOf(zinssatzS).doubleValue();

double restSchuld = kreditsumme;

while(restSchuld > 0) {
n = n+1;
restSchuld =  (restSchuld +( restSchuld/100 * zinssatz) /12 - monatlicherate) ;




laufzeit.setText ("Laufzeit: " + n);

}
}
}
```


----------

