Formatierung der Ausgabe meines Programms

Status
Nicht offen für weitere Antworten.
B

balu

Gast
Hallo,

ich habe 2 Problemchen.

1.
Ich möchte das ein Tilgungsplan ausgegeben wird, funktioniert schon,
aber die Ausgabe soll nach dem 9. Jahr mit einem Leerzeichen weniger erfolgen,
damit die Formatierung stimmt. In meinem Beispiel habe ich es mit einer
Schleife versucht, aber es klappt irgendwie nicht.

2.
Wenn meine Berechnung mit dem Programm eine Laufzeit von bspw. 18 Jahren
hat, dann wird im 19.Jahr bei der "Schuld" der Wert "0" geschrieben, aber danach
folgen bei den anderen 3 Spalten (Zins, Tilgung, Annuität) auch noch Werte - das
soll nicht mehr passieren!

Was kann man da tun? Zum 1. Problem gibts den Versuch schon.

Code:
class Tilgung
 	{
 		// Membervariablen
 		double kreditbetrag;
 		double zinssatz;
 		int laufzeit;
 		double tilgungsrate;
 	
 	
 		public Tilgung(double kreditbetrag, double zinssatz, int laufzeit)
 		{
 			this.kreditbetrag = kreditbetrag;
 			this.zinssatz = zinssatz;
 			this.laufzeit = laufzeit;
 			tilgungsrate = 0;
 		}
 	
 	
 		// Dezimalformat wird festgelegt
 		DecimalFormat dFormat = new DecimalFormat ("###,###");
 	
 		// Methoden
 		public String gibTilgungsplanAus()
 		{
 			String ret = "";
 			double gesamtZinsen = 0;	// für die Berechnung der Gesamtzinsen
 			double gesamtAnnuitaet = 0;	// für die Berechnung der Gesamtannuitaet
 		
 			for (int x=0; x<=laufzeit; x++)
 			{
 				// für die Nummerierung am Anfang in der ersten Spalte
				ret += "  "+(x+1)+".     ";
 			
 				// Restschuld für die Werte in der zweiten Spalte
 				double restschuld=kreditbetrag-(x*(kreditbetrag/laufzeit));
 				if(restschuld<100000)
 				{
 					ret += "  "+dFormat.format(restschuld);
 				}
 				else
 				{
 					ret += dFormat.format(restschuld);
 				}
 			
 				// Zinsbetrag für die Werte in der dritten Spalte
 				double zinsbetrag=(kreditbetrag-(x*(kreditbetrag/laufzeit)))*zinssatz/100;
 				if(zinsbetrag<10000)
 				{
 					ret += "         "+dFormat.format(zinsbetrag);
 				}
 				else if(zinsbetrag<1000)
 				{
 					ret += "          "+dFormat.format(zinsbetrag);
 				}
 				else if(zinsbetrag<100)
 				{
 					ret += "           "+dFormat.format(zinsbetrag);
 				}
 				else if(zinsbetrag>10000)
 				{
 					ret += "       "+dFormat.format(zinsbetrag);
 				}
 			 			
 				// Tilgungsrate für die Werte in der vierten Spalte
 				double tilgungsrate=kreditbetrag/laufzeit;
 				ret += "             "+dFormat.format(tilgungsrate);
 			
 				// Annuitaet für die Werte in der fünften Spalte
 				double annuitaet=((kreditbetrag-(x*(kreditbetrag/laufzeit)))*zinssatz/100)+(kreditbetrag/laufzeit);
 				ret += "             "+dFormat.format(annuitaet)+"\n";
 			
 				// Gesamt-Zinsen für die Werte in der zehnten Zeile
 				gesamtZinsen = zinsbetrag + gesamtZinsen;
 			
 				// Gesamt-Annuitaet für die Werte in der elften Zeile
 				gesamtAnnuitaet = annuitaet + gesamtAnnuitaet;
 			}
 			ret += "\nZinsen gesamt:    "+dFormat.format(gesamtZinsen)+"\n";
 			ret += "Annuitaet gesamt: "+dFormat.format(gesamtAnnuitaet)+"\n";
 			
 			return ret;
 		}
	}// end of class Tilgung
 

DP

Top Contributor
wo sagst du dem denn, wann was passieren bzw. nicht passieren soll?!

sehe nichts von einem leerzeichen weniger ab dem 9. jahr - ebensowenig sehe ich nichts warum er ab dem 20. jahr nichts mehr machen soll?!
 

mic_checker

Top Contributor
balu hat gesagt.:
Code:
for (int x=0; x<=laufzeit; x++)
{
// für die Nummerierung am Anfang in der ersten Spalte
ret += "  "+(x+1)+".     ";

Muss du nicht bei 1 anfangen zu zählen? Dann kannst du dir dein (x+1) sparen .... Hab den weiteren Code nicht angeguckt, also entschuldige wenn du x = 0 brauchst.
Falls du dies beibehälst, darfst du nicht mit :

Code:
if(x < 10)

Kontrollieren ob das Jahr 10 oder größer ist, sondern musst

Code:
if(x < 9)

schreiben.

Eine Möglichkeit - zugeben nicht sehr elegant, wäre so was:

Code:
/* MIt x = 0 - also bisherigem Ansatz */
            if(x < 9)
           		ret += "  "+(x+1)+".     ";
		      else
		      	ret += " "+(x+1)+".     ";

Greets
 

baenker

Mitglied
mic_checker hat folgendes geschrieben::
was ist damit?
http://www.java-forum.org/de/viewtopic.php?t=12720

Hätten diese Fragen denn mit in die eine Nachricht gehört? Dadurch wir das doch super lang....und vielleicht anwortet keiner mehr auf die zuletzt gestellte Frage, wenn man stundenlang scrollen soll. Wer weiß dann überhaupt, das da noch ne Frage ist?
 

DP

Top Contributor
aber wenigstens einen link dazu... gibt leute, die sich nur neue threads anschauen ;)
 

mic_checker

Top Contributor
baenker hat gesagt.:
Hätten diese Fragen denn mit in die eine Nachricht gehört?

Ja, es ist ja möglich das in dem Thread fragen beantwortet worden die sich jemand beim Lesen dieses Threads stellt. Außerdem hast du dort den ganzen Code gepostet,so dass man besser weiss was du überhaupt damit anstellen willst.

Egal - zurück zum Thema. Den Ansatz von oben ausprobiert?
 

baenker

Mitglied
mic_checker hat gesagt.:
baenker hat gesagt.:
Hätten diese Fragen denn mit in die eine Nachricht gehört?

Egal - zurück zum Thema. Den Ansatz von oben ausprobiert?

Hat funktioniert, danke!
Doch meine "else if"-Schleifen beim Zinsbetrag sinn scheinbar nutztlos - die tuen bei den Werten nix, die Formatierung -trotz kleinerer Zahlen- bleibt dieselbe.

Was könnte man mit dem 2.Problem machen, das nur die "0" bei Restschuld stehen bleigt, sonst nichts?
 

mic_checker

Top Contributor
Meinst du, dass ab dem 19. (Tilgungs)jahr die Restschuld (restschuld) auf 0 gesetzt werden soll und die folgenden Ausgaben (Zinsbetrag,Annuität,Tilgungsrate) nicht mehr erscheinen sollen?

balu hat gesagt.:
Code:
 				double restschuld=kreditbetrag-(x*(kreditbetrag/laufzeit));
 				if(restschuld<100000)
 				{
 					ret += "  "+dFormat.format(restschuld);
 				}
 				else
 				{
 					ret += dFormat.format(restschuld);
 				}

Vielleicht solltest du sowas probieren:

Code:
            double restschuld;
            if(x > 18)
            {
	            restschuld = 0;
            	ret += "  "+dFormat.format(restschuld);
	            return ret;
	         }
	         else
	         {
		         // Restschuld für die Werte in der zweiten Spalte
            	restschuld=kreditbetrag-(x*(kreditbetrag/laufzeit));
            }
	         
            if(restschuld<100000)
            {
               ret += "  "+dFormat.format(restschuld);
            }
            else
            {
               ret += dFormat.format(restschuld);
            }

Kommt jetzt drauf an ab welchem Jahr, also ab 18,19,20 etc. - dementsprechend musst du es anpassen - hoffe es ist so gewollt. ansonsten meld dich.
 

baenker

Mitglied
Das ist es glaub ich nicht.
Ich versuche es mal ein wenig besser zu beschreiben:
Durch mein GUI-Fenster hat der Benutzer die Möglichkeit, bei der Laufzeit einen Wert seiner Wahl anzugeben. 18 war dementsprechend also nur ein Beispiel, es könnte jede x-beliebige Zahl sein. Also im, um beim Bsp. 18 Jahre Kreditberechnung zu bleiben, das 19. jahr mit aufgeführt, vobei dort eine 0 bei der Schuld stehen soll, aber der Rest der Zeile soll keine Werte mehr haben...und nicht z.B. mit Negativwerten weiterschreiben. Alles klar?
 

mic_checker

Top Contributor
Ja ok. Bei meinem bisherigen Ansatz hätte er im Falle von z.B. 22 Jahren die Zeilen 19,20,21,22 (also Jahre) je 0 ausgegeben. Dachte ursprünglich du wolltest das so - obwohl wenig sinnvoll.

Du meinst es aber so:

User gibt Laufzeit ein, z.B. 18 Jahre , nun sollen die 18 Jahre und die zugehörigen Werte ausgeben werden. Anschließend soll noch für das Jahr 19 bei Restschuld 0 ausgegeben werden (und beim Rest steht nichts). Oder?
Du kannst mein Beispiel trotzdem benutzen, es ist nur minimal umzuprogrammieren - falls du damit Probleme hast melde dich nochmal.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben