Kreditrechner programmieren

diesamy

Mitglied
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:

Java:
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++)  //


}
 
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? 🙂
 
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.
 
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 :/
 
Deine Textfelder haben alle einen Bezeichner. Als Bsp.:

Java:
TextField Kreditsumme = new TextField("",7);

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

Java:
TextField kreditsumms = new Textfield(",7);

um nun den Inhalt auszulesen

Java:
String kreditsummeS = kreditsumms.getText();

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

Java:
int kreditsummeI = Integer.parseInt(kreditsummeS);

Hilft dir das weiter? 🙂
 
Deine Textfelder haben alle einen Bezeichner ...
... um nun den Inhalt auszulesen
Code:
.getText()
Das ganze brauchst du dann noch als Zahl um damit rechnen zu können
Code:
Integer.parseInt(

Schön das einer wenigstens die Frage verstanden hat. Mir war
wo bringe ich das alles zusammen
einfach zu "groß".

Kompliment!
 
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 ?

Java:
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);

}




}
 
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]
 
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
 
Zuletzt bearbeitet:
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....

Java:
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);

	}

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

Java:
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?
 
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;
Java:
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.

Java:
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]
 
Zuletzt bearbeitet:
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 ^^. 🙂
 
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.
 
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 ??







Java:
 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);

}
}
}
 

Zurück
Oben