tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von DarkWizzard
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
535
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DDDB DDDB ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    6
    Hallo zusammen!
    Ich habe ein Problem mit einer Uebung, bei der ich mir mein Guthaben nach x Jahren auf meinem Tagesgedkonto ausrechnen und anzeigen lassen will.
    Der Zinssatz ist nach Guthabengroesse gestaffelt. Da ich noch absoluter Anfaenger bin, stehen mir nur ziemlich wenige Befehle zur Verfuegung (Ich bin sicher, es gibt viel elegantere und kuerzere Loesungen ohne tausend Mal if und while und else, kenn ich aber noch nicht).

    So wie ich es gemacht habe (s.u.) hoert der Loop aber niemals auf, ausserdem aendert sich das angezeigte Guthaben nicht. Wieso?
    Bitte habt Nachsicht, bin ein absoluter Anfaenger (erste Woche), ich vermute schon, dass es ein absout bescheuerter Denkfehler ist, den ich aber einfach nicht entdecke.
    Vielen Dank im Voraus!


    package package4;

    /* Konditionen:
    * 0.01 bis 5000 EUR : 1,75% p.a.
    * 5000,01 bis 50.000,00 EUR: 1 % p.a.
    * ab 50.000, 01 0,5 % p.a.
    * Formel: A = P [(1+R)hoch n]
    */
    public class Tagesgeldkonto {

    public static void main (String [] args)
    {
    double startkap = 10000; //hier das Startkapital eingeben
    double zinssatz = 0.0175;
    double zinssatz2 = 0.01;
    double zinssatz3 = 0.005;
    int jahreend = 50; //hier die Laufzeit eintragen
    int jahre = 1;
    double guthaben;

    if (startkap <=5000)
    do
    {
    guthaben= startkap * Math.pow(1+zinssatz,jahre);
    System.out.println(guthaben);
    jahre=jahre++;
    }
    while (guthaben<=5000 & jahre<=jahreend);

    do
    {
    guthaben= startkap * Math.pow(1+zinssatz2,jahre);
    System.out.println(guthaben);
    jahre=jahre++;
    }
    while (guthaben>5000 & guthaben<=50000 & jahre<=jahreend);

    do
    {
    guthaben= startkap * Math.pow(1+zinssatz3,jahre);
    System.out.println(guthaben);
    jahre=jahre++;
    }
    while (guthaben>50000 & jahre<=jahreend);

    if ((startkap>5000) & (startkap <=50000))
    do
    {
    guthaben= startkap * Math.pow(1+zinssatz2,jahre);
    System.out.println(guthaben);
    jahre=jahre++;
    }
    while (guthaben>5000 & guthaben<=50000 & jahre<=jahreend);

    do
    {
    guthaben= startkap * Math.pow(1+zinssatz3,jahre);
    System.out.println(guthaben);
    jahre=jahre++;
    }
    while (guthaben>50000 & jahre<=jahreend);

    if (startkap >50000)
    do
    {
    guthaben= startkap * Math.pow(1+zinssatz3,jahre);
    System.out.println(guthaben);
    jahre=jahre++;
    }
    while (jahre<=jahreend);


    }

    }
     

  2. #2
    DarkWizzard DarkWizzard ist offline Mitglied Bronze
    Registriert seit
    Jan 2009
    Ort
    Braunschweig (Ni)
    Beiträge
    32
    Hi,

    vorneweg: Bitte schreib code immer in der code-Umgebung, das ist dann viel übersichtlicher.

    Du hättest eine der folgenden drei Varianten nehmen können:

    Code :
    1
    2
    3
    
    jahre++;
    jahre += 1;
    jahre = ++jahre;

    Nur das, was du gemacht hast darfst du nicht machen

    So wie du das gemacht hast darfst du dir das folgendermaßen vorstellen (bitte korrigiere mich jemand fals ich hier Mist erzähle):

    Der Wert von "jahre" wird in einen Zwischenspeicher genommen und von da aus wieder "jahre" zugewiesen. Danach wird der Wert in diesem Zwischenspeicher um eins erhöht. Das bringt dir dann aber nichts mehr.

    MfG
    DarkWizzard
    sheel bedankt sich. 

  3. #3
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Willkommen bei tutorials.de

    Zuerst einmal: Bei deinen Bedingungen in den while-Schleifen verwendest du & als 'und'.
    Es ist aber && ! Dasselbe gilt für 'Oder', das ist ||
    Doppeltes Zeichen!
    Einzelne können zwar je nach Situation sogar das Gleiche bewirken, sind aber was anderes und funktionieren nicht immer gleich wie die doppelten.

    Probiers einmal mit den Doppelten

    PS: Das mit den Jahren ist schon so in Ordnung
     

  4. #4
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Ich hab deinen Code einmal etwas kompakter gemacht, als Beispiel.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    public class Zinsen
    {
        public static void main (String [] args)
        {
            double startkap = 10000; //hier das Startkapital eingeben
            int jahreend = 50; //hier die Laufzeit eintragen
     
            int jahre;
            double guthaben;
            double zinssatz;
     
            guthaben=startkap;
     
            for(jahre=0;jahre<jahreend;jahre++)
            {
                if(guthaben<=5000.0)zinssatz=1.75;
                else if(guthaben<=50000.0)zinssatz=1.00;
                else zinssatz=0.50;
     
                guthaben = guthaben + (guthaben*(zinssatz/100.00));
     
                System.out.println("Jahr " + (jahre+1) + ": " + guthaben);
            }
        }
    }
     

  5. #5
    DDDB DDDB ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    6
    Wow, das ging ja flott! Vielen Dank!

    Hat mir sehr geholfen, es lag, wie DarkWizzard berichtigt hat, am
    PHP-Code:
    jahre jahre++; 
    Wieder was gelernt.

    Vielen Dank auch @ sheel, ich werde mir den Unterschied zwischen Doppel-Unds und -Oders merken. Hatte in diesem Fall jedoch keine Veraenderung gebracht. Danke auch fuer die Muehe, mir eine kompakte Version anzubieten. Da bin ich wohl ueber Moskau nach Rom gewandert. Das war schon immer mein Problem.
     

  6. #6
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Das ++ hat doch einen Unterschied gemacht?
    Jetzt hab ich auch wieder was dazugelernt

    Ich sollte sowas wohl nicht in C probieren und denken, dass es in Java gleich ist
     

Ähnliche Themen

  1. JS-Popup hoert nicht auf zu laden!?
    Von Suchfunktion im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 02.05.08, 17:54
  2. MC- Warum ändert sich der Wert nicht?
    Von Mammuth im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 01.10.07, 16:02
  3. Antworten: 3
    Letzter Beitrag: 16.03.07, 14:25
  4. #1064 Error: Warum übernimmt er diesen Wert nicht
    Von TomHH im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 06.01.05, 19:15
  5. Warum lassen Sich PS - JPG`s nicht einbauen?
    Von vlap im Forum HTML & XHTML
    Antworten: 4
    Letzter Beitrag: 16.03.04, 22:40

Stichworte