Zinsberechnung - Fehler im Code

Hallo Zusammen,
Der Zweck meines Codes sollte sein, die Anzahl Jahre zu berechnen und auszugeben, die es benötigt beim Startkapital K (wird vom User über Keyboard eingegeben) mit 5% Zins pro Jahr auf 10'000.- zu kommen.
Wenn der User 1 oder weniger eingibt, sollte die Console -1 ausgeben, da es mit diesem Startkapital nicht möglich ist.

Jetzt habe ich das zuerst mit einem Schreibtischtest mal versucht zu konstruieren und in Java umgesetzt und wie ihr bestimmt auf den ersten Blick erkennen könnt. Funktioniert es nicht und ich bin ratlos weswegen. Einerseits motzt der Compiler wegen meiner If-Anweisung, das es ein ungültiges Package ist und wenn ich es dann doch i-wie compilieren kann, gibt es mir den Wert years nicht. Und wenn ich return years; schreibe, motzt der Compiler, years sei ein "unexpectet value to return".

Könnt ihr mir helfen? Danke.

Code:
public class Zinsrechnung {
  public static void main (String []args){
    int k=Integer.parseInt(args[0]);
    double sum= 0;
    int years= 0;
    double z= 0;
    if(k<=1) {System.out.print("-1");}
    else{
     
        while(sum<=10000){
          z=k*5/100;
          sum=z+k;
          years=years+1;
          return;
        }
      }
   
    System.out.print(years+"Jahre sparen um CHF 10'000.- zu erreichen");
  }
}
 
Weisst du denn was return macht ? Speziell in deiner Methode main ?
Ich vermute mal du willst deine Schleife beenden und dahinter weitermachen. Und das geht mit break;
 
ich wollte, respektiv dachte, dass return years, den neu berechneten Wert nach jedem Schlaufendurchgang (bis while-Bedingung erfüllt ist) zurück gibt.
Oder anders gesagt, ich versuche die Anzahl Jahre analog der Anzahl Schlaufendurchgänge zu berechnen.
 
Nein, return verlässt die Methode in der du bist. Und das ist hier die main-Methode, d.h. das Programm beendet sich.
Und deine Zinsformel ist irgendwie falsch oder ich verstehe nicht was du rechnest.
Das Kapital nach n Jahren bei einem Startkapital von K0 und einem Zinsatz von p errechnet sich:
Kn = K0 * (1+p)^n

Richtig wäre dann so was:
Code:
public class ZinsBerechnung {

    public static void main(String[] args) {
        int K0 = 3000;     // das Startkapital
        double Kn = 0;    // das Kapital nach n Jahren
        int years = 1;    // wir beginnen mit 1 Jahr
        double z = 0.05;  // 5% Zins
        if (K0 <= 1) {
            System.out.print("-1");
        } else {

            while (Kn <= 10000) {
                Kn = K0 * Math.pow(1 + z, years);
                years = years + 1;
            }
        }

        System.out.print(years + "Jahre sparen um CHF 10'000.- zu erreichen");
    }
}
 
ich habe nicht die Kapitalzinsformel genommen, sondern berechne bei der variablen z wie viel Zins in CHF ich im Jahr erhalte für gegebenes Startkapital, das mit 5% verzinst wird und addiere das so lange mit dem Startkapital bis ich auf 10'000.- komme. Ist denn nun return das einzige Problem, dass es mir die Anzahl years nicht anzeigt?
 
Wenn deine Berechnung so wie du es beschreibst stimmt ist es das einzige Problem weil er ja gleich beim ersten Schleifendurchlauf das Programm beendet. Ich habe allerdings deine Berechnung nicht getestet weil ich nicht wusste was du da machst. streiche einfach die Zeile mit return ersatzlos
 
Ich habe es mir nochmal angeschaut und du müsstest es so machen:
Code:
            while (k <= 10000) {
                k = k + k*z;
                years = years + 1;
            }
Du musst erstens die Zinsen immer zum Kapital dazuaddieren und zweitens in jedem Jahr die Zinsen vom aktuellen Kapital berechnen.
 
Das sollte so auch:
Java:
    private static float knOhneZinseszins(float k0, float p, float n) {
        return (float) (k0 + (k0 * p / 100.0) * n);
    }
    private static float knMitZinseszins(float k0, float p, float n) {
        return (float) (k0 * Math.pow(1.0 + p / 100.0, n));
    }
    private static float nOhneZinseszins(float k0, float p, float kn) {
        return (float) ((kn - k0) / (k0 * p / 100.0));
    }
    private static float nMitZinseszins(float k0, float p, float kn) {
        return (float) (Math.log(kn / k0) / Math.log(1.0 + p / 100.0));
    }

Das ist die Zinseszins-Formel, das ist NICHT die Sparkassenformel.

Aber evtl kann mir jemand helfen, ich bekomme, aufgerufen mit
Code:
knOhneZinseszins(1000, 5, 50);
knMitZinseszins(1000, 5, 50);
nOhneZinseszins(1000, 5, 3500);
nMitZinseszins(1000, 5, 11467.4f);

Code:
3500.0
11467.399
50.0
50.0

Aber der zweite Wert soll doch nicht 11467.399 sein, sondern genauer 11467.4. 😕
Wo entsteht die Ungenauigkeit, bei Berechnung des Zinsfußes???
 
das Taschenrechnerergebnis ist nur mit Modula zu erreichen 11467,3997857536760348514 um einen Wert mit 2 Nachkommatellen zu bekommen aber auf 3 stellen auszurechnen müßte man erst alles auf mit 100 multiplizierren um mit Mat.cell zu runden und dann durch 100 zu teilen.
l
 
ist nur mit Modula zu erreichen
Modula? Ich weiß leider nicht zu 100 % jenau was du damit meinst.

...Die Anzahl der Jahre... dann muss natürlich noch aufgerundet werden immer.

Wahrscheinlich ist die Übung so gedacht, das man Schleifen usw übt. Dann ist das rechnerische Ermitteln nicht angebracht.

Aber ist doch jetzt gut, '11467,39....' und ich hatte auf Darstellungs Rundungs oder Rechenfehler getippt. Falsch gedacht. 😀
 
Java:
public class Zinsberechnung {
  
     public static void main (String []args){
           int k=Integer.parseInt(args[0]);
          int sum= k;//
           int years= 0;//jahre
          int z= 5;//Zinssatz
         int zinsen =0;
          
           while(sum <=10000){
              
               zinsen=(sum*z)/100;
               sum=zinsen+sum; 
                 years=years+1;
                 System.out.println(k);
                 System.out.println(years);
                 System.out.println(zinsen);
                 System.out.println(sum);
                 }
          System.out.print(years+"Jahre sparen um CHF 10'000.- zu erreichen");
5000 Kapitaleinsatz
15 Years
494 letzte Rate
10383 erreichtes kapital
15Jahre sparen um CHF 10'000.- zu erreichen
 
Zuletzt bearbeitet von einem Moderator:
Hallo @Trjavnamen ,
das würde mit dem auf der anderen Seite genannten Zinsfußes genauer gehen - denn du addierst....
In meiner Sig. steht beschrieben , wie du Code-Tags verwenden kannst.
 
Java:
package zinsen;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Zinsberechnung {
   
      public static void main (String []args){
            int k=Integer.parseInt(args[0]);
           int sum= k;////anfangssumme für zinsberechnung
            int years= 0;//jahre
           int z= 5;//Zinssatz
          int zinsen =0;
           
            while(sum-k <=9999){
               
                zinsen=(sum*z)/100;
                sum=zinsen+sum; 
                  years=years+1;
                  System.out.println(k);
                  System.out.println(years);
                  System.out.println(zinsen);
                  System.out.println(sum);
                  }
           System.out.print(years+"Jahre sparen um CHF 10'000.- zu erreichen");
            
               
                
                   
                
              }
           
              }
 
Zuletzt bearbeitet von einem Moderator:
Code:
        double K0 = 5000.0;     // das Startkapital
        int years = 0;    // wir beginnen mit 1 Jahr
        double z = 0.05;  // 5% Zins
        while (K0 <= 10000) {
            K0 = K0 + K0 * z;
            years = years + 1;
        }
        System.out.println(years + "Jahre sparen um CHF 10'000.- (" + K0 + ") zu erreichen");
Aber habe mich verschrieben, 15 Jahre war schon richtig !
 
mit 7,5 Zinseszins ist erfahrungsgemäß nach 10 Jahren das Doppelte angespahrt.In der Umgekehrten Logik ist ein Kredit ohne Zinsabtragung nach 10 Jahren doppelt so hoch. Banken rechnen vierteljährlich ab: Kredit + Zinsen für Kredit auf 3 Monate - gezahlte Abschlagszahlung +Kontogebühren = neuer Kreditbetrag. Wird nachträglich die Abschlagssumme geändert kann es passieren das der rückzuzahlende Kredit erhöht wird(anfallende Zinsen schlucken die Rückzahlung und mehr) . Die letzte Weltwirtschaftskriese ist durch die Zinspolitik der Amerikanischen Banken ausgelöst worden. Anstatt 3.5% für Krediete verlangten sie einfach 7.5% was jedem Deutschen im Prinzip ebenfalls treffen kann mit max.10 Jahre Laufzeit festschreibung auf Zinsfuß. Leute die heute 1% bezahlen und bei der Bank ohne Bauspahrvertrag arbeiten können in zehn Jahren einen so hohen Zinssatz bekommen das sie schlichtweg in Schulden versinken.
 
Was ist der Zinsfuss
Zinsen = 5 (%)
Zinsfuß = p = 5/100 = 0,05
Zinsfaktor = q = 1 + 5/100 = 1,05
Habe ich das jetzt aufgefasst. Mit dem Zinsfaktor ists angenehmer zu rechnen. Kann auch berechnet werden durch (100+5)/100.

@Trjavnamen , wahrscheinlich Quatsch. Der Zinssatz müsste 100(2^(1/10)-1)=7.1773462536293164213... betragen , damit sich nach 10 Jahren alles verdoppelt. Aber gern gelesen.
 
Der Zinssatz müsste 100(2^(1/10)-1)=7.1773462536293164213... betragen , damit sich nach 10 Jahren alles verdoppelt
exakt !
mit 7,5 Zinseszins ist erfahrungsgemäß nach 10 Jahren das Doppelte angespahrt.
Wieso erfahrungsgemäss ? Das lässt sich genau ausrechnen 🙂
Im Übrigen artet das Ganze hier wohl etwas aus. Zur Berechnung wurde bereits alles gesagt und die TE wird sich inzwischen kaputtlachen
 
haha 5% von 100€ sind 5€= 5%Zinssen=5€ Im erstgenannten Fall für das erste Jahr 5% von10 000 gleich 500 bei im 2 Jahr 5% von 10500 =525 € usw. bei Zinsfuß, Zinsatz (und im Volksmund 5%Zinsen)wobei das ausschreiben von diesem Zeichen"%" es immer ein Prozentsatz ist.
 
Zuletzt bearbeitet:
package zinsen;

public class Zinsberechnung {

public static void main (String []args){
int k=Integer.parseInt(args[0]);
double sum= k;////anfangssumme für zinsberechnung
double years= 0.0;//jahre
double z= 5.0;//Zinssatz ohne %zeichen
double zinsen =0.0;// die resultierende Zinsen Betrag
double zinsenR =0.0; //die gerundeten Zinsen
while(sum-k <=10000.00){

zinsen=(sum*z)/100;// AUSRECHNEN DER ZINSEN
zinsenR =(( Math.ceil(zinsen*100))/100); //Runden
sum=zinsenR+sum; // ADDIEREN ALTE SUM ZUR NEUEN SUM

years=years+1;
System.out.println(k);
System.out.println(years);
System.out.println(zinsenR);
System.out.println(sum);

}
System.out.print(years+"Jahre sparen um CHF 10'000.- zu erreichen");





}

}
 
Alles mit Double ausgerechnet. Programm hat den Vorteil das man auch zinsatz mit Kommastelle eintragen kann.PS in der console kann man nach oben scrollen und die Berechnung vom ersten bis zum letzten Jahr sehen.
 

Neue Themen


Zurück
Oben