Ratensparmodell

Folgende Aufgabe:
Die Bank MyFin bietet eine Ratensparmodell nach folgenden Modalitäten an.
 Der Sparvertrag beginnt zum Januar eines Jahres. Er läuft eine feste Anzahl von ganzen
Jahren, jedoch höchstens 5 Jahre.
 Es muss zum Monatsbeginn ein Betrag einbezahlt werden, der variabel sein kann, einen
Mindestbetrag von 25 Euro aber nicht unterschreiten darf.
 Das einbezahlte Geld wird mit einem jährlichen Zinssatz p verzinst. Die anfallenden Zinsen
werden am jeweiligen Jahresende dem Sparbetrag hinzugefügt und entsprechend bis zum
Ende der Laufzeit weiter mitverzinst.
Schreiben Sie ein Programm namens Bank.java mit folgenden Methoden:
a) Einlesen einer Zahlungsreihe von der Standardeingabe. Die Korrektheit der Beträge (Da-tentyp, Anzahl, Wert) kann angenommen werden.

Code:
public static double[] liesDaten()

b) Schreiben Sie eine weitere Methode, die die eingelesene Zahlungsreihe ubergeben bekommt
und den eingezahlten Gesamtbetrag zurückgibt.
Hier mal nur der Code, den ich für die Methode programmiert habe:

Java:
  public static double [] liesDaten(double p=0.00,
	   int Laufzeit=0, Monatsbetrag){
	   
	   for (int i=1; i<=12; i++; Laufzeit<=5; Monatsbetrag>=25) {
	   Monatsbetrag++;
	   }
	   
	   return Monatsbetrag;
	   }

Folgende Fehlermeldungen:
Bank.java:12: ')' expected
public static double [] liesDaten(double p=0.00,
^
Bank.java:12: illegal start of type
public static double [] liesDaten(double p=0.00,
^
Bank.java:12: <identifier> expected
public static double [] liesDaten(double p=0.00,
^
Bank.java:12: ';' expected
public static double [] liesDaten(double p=0.00,
^
Bank.java:13: <identifier> expected
int Laufzeit=0, Monatsbetrag){
^
Bank.java:13: ';' expected
int Laufzeit=0, Monatsbetrag){
^
Bank.java:15: ')' expected
for (int i=1; i<=12; i++; Laufzeit<=5; Monatsbetrag>=25) {
^
Bank.java:15: not a statement
for (int i=1; i<=12; i++; Laufzeit<=5; Monatsbetrag>=25) {
^
Bank.java:15: not a statement
for (int i=1; i<=12; i++; Laufzeit<=5; Monatsbetrag>=25) {
^
Bank.java:15: ';' expected
for (int i=1; i<=12; i++; Laufzeit<=5; Monatsbetrag>=25) {
^
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

habe es jetzt nur auf die Schnelle überfolgen ....

(a) vor der Parameter "Monatsbetrag" fehlt der Bezeichner

(b) zur FOR-Schleife:
wie die die Fehlermeldung schon besagt: "not a statement" !!
Ich verstehe auch nicht wirklich, was Du da eigentlich bezwecken willst!
Java:
for( int i=1; i<=12; i++ )
{
    // ??? Laufzeit<=5; 
    // ??? Monatsbetrag>=25) 
    Monatsbetrag++;
    return Monatsbetrag;
}

???:L

Gruß
Klaus
 

HimBromBeere

Top Contributor
Java:
public static double [] liesDaten(double p=0.00,
       int Laufzeit=0, Monatsbetrag){
Was soll denn das sein? Eine Methode mit Standardwerten? Sowas gibt´s in JAVA nicht.
Java:
public static double [] liesDaten(){
    double p = 0.00;
    int Laufzeit = 0, Monatsbetrag = 0;
    ...
}
So müsste es heißen...

VfL_freak hat gesagt.:
Ich verstehe auch nicht wirklich, was Du da eigentlich bezwecken willst!
Du hast da nur die geschweifte Klammer vertüdelt, dann würde das auch Sinn ergeben:
[JAVA=4]
for (int i=1; i<=12; i++; Laufzeit<=5; Monatsbetrag>=25) {
Monatsbetrag++;
}
return monatsbeitrag;
[/code]
[EDIT]Ups... die for-Schleife sieht wirklich bissl seltsam aus... was sollen die vielen Anweisungen hinter dme
Code:
i++
dort?
Vlcht. sowas?
Java:
for (int i=1; i<=12; i++) {
    if (Laufzeit<=5 && Monatsbetrag>=25) Monatsbetrag++;
}
[/EDIT]
 
Zuletzt bearbeitet:
Nachdem der Code jetzt so heißt:


Java:
	   public static double [] liesDaten(){
    double p = 0.00;
    int Laufzeit = 0, Monatsbetrag = 0;
	   
	  for (int i=1; i<=12; i++) {
    if (Laufzeit<=5 && Monatsbetrag>=25) Monatsbetrag++;
}
	   
	   return Monatsbetrag;
	   }


kommt nur noch eine Fehlermeldung:
Bank.java:20: incompatible types
found : int
required: double[]
return Monatsbetrag;
^
1 error
 
G

Gast2

Gast
Deine Methode soll (laut deklaration) ein double[] zurückgeben. Du gibst aber ein int zurück.
 

VfL_Freak

Top Contributor
Nachdem der Code jetzt so heißt:
Java:
    public static double [] liesDaten()
    {
    double p = 0.00;
    int Laufzeit = 0, Monatsbetrag = 0;
	   
    for (int i=1; i<=12; i++) 
    {
        if (Laufzeit<=5 && Monatsbetrag>=25) 
              Monatsbetrag++;
    }
	   
    return Monatsbetrag;
}

Du gibst doch mit "Monatsbetrag" einen Integer zurück, obwohl die Funktion "double []" zurückgeben soll !!
[EDIT]
too late :-(
[/EDIT]

Zudem macht Deine FOR-Schleife noch immer wenig Sinn, da "Monatsbetrag" NIE größer 0 werden wird !
Beide Werte der Bedingung sind immer 0 und mit "&&" (also logischem UND) verknüpft!

Gruß
Klaus
 

nazar

Mitglied
Laut Aufgabenstellung ist die ganze Methode fragwürdig.
Allerdings hast du die Aufgabenstellung nur zerstückelt geliefert.

Trotzdem hier mal ein Ansatz:
So wie ich das sehe, sollst du die Monatsbeiträge über die Konsole eingeben.
Dafür dient deine Methode "liesDaten()".
Diese Beiträge speicherst du dann, sofern sie nicht < 25 sind in einem double[].
Dann gibt "liesDaten()" dass double[] an andere Methoden zur Weiterverarbeitung.
 
Hmm... ich glaub ich gib mal ein paar erklärende Worte zur Aufgabe ab:

Jeden Monat wir ein Betrag >=25 auf das Konto eingezahlt. Diese 12-60 Beträge (5*12=60) sollen individuell eigegeben werden, genauso, wie der Zinsatz p und die Laufzeit (1-5 Jahre). Von der Laufzeit hängt also ab, wie viele Monatsbeträge eingegeben werden.
Ich denke mal Laufzeit muss vom Typ Integer sein, da der Vertrag schlecht nur ein halbes Jahr laufen kann.

Ich hab übrigens
Code:
Monatsbetrag++;
und
Code:
return Monatsbetrag;
reingeschrieben, weil sich dies schon auf die b) bezieht, die ich vergessen habe anzugeben:oops:
b) Schreiben Sie eine weitere Methode, die die eingelesene Zahlungsreihe ubergeben bekommt
und den eingezahlten Gesamtbetrag zurückgibt.
 
Zuletzt bearbeitet:

nazar

Mitglied
Was meinen Verdacht bestätigt.

In A) sollst du die Methode schreiben, die die eingezahlten Monatsbeiträge einliest.
In B) rufst du dann die Methode "liesDaten()" auf und verarbeitest den Return-Wert.

In etwa "double[] beitraege = liesDaten();".

Du solltest dich vllt. nochmal damit auseinandersetzten, was Methoden überhaupt sind.
Dein Ansatz beides in Eine zu packen, wenn die Aufgabenstellung von Zwei spricht, ist ja ebenfalls wieder falsch.
 

HimBromBeere

Top Contributor
OK... schmeißen wir mal alles bisher Gehörte zusammen:

A) Eingabe
1. Eingabe der Laufzeit
2. Eingabe der monatl. Beiträge (Laufzeit * 12)
Beitrag < 25 -->erneute Eingabe oder was auch immer

B) Ausgabe des Gesamtbetrages
1. Berechnung der angefallen Zinsen mit
2. Ausgabe

Kümmer dich erstmal um deine Eingabe, den Rest klären wir später (dafür schreibst du auch eine andere Methode).

Ich denke mal Laufzeit muss vom Typ Integer sein, da der Vertrag schlecht nur ein halbes Jahr laufen kann.
Theoretisch schon möglich, aber in der Aufgabe nicht verlangt, daher stimmt int schonmal
 
Zuletzt bearbeitet:

nazar

Mitglied
Du kannst int verwenden. Das ist aber garnicht das Hauptproblem.

Allgemein sollte das Thema wohl eher ins Anfängerforum.
Setz dich noch etwas mit Java auseinander.

Zum Konsoleneinlesen:
Code:
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
	System.out.print("Geben Sie etwas ein: ");
	String zeile = null;
	try {
		zeile = console.readLine();
	} catch (IOException e) {
		// Sollte eigentlich nie passieren
		e.printStackTrace();
	}
	System.out.println("Ihre Eingabe war: " + zeile);

Nun, wie schreibst du das Programm?

Für A)
Lass den Benutzer zuerst die Jahresanzahl eingeben.
Aus der Anzahl der Jahre kannst du dann ermitteln, wie viele Monatsbeiträge eingegeben werden müssen.
Überprüfe dabei auf > 25.
Ist das nicht der Fall, gib eine Fehlermeldung auf die Konsole und lass ihn den Betrag nochmal eingeben.

Zu B)
Die Methode aus B ruft die Methode aus A auf. Siehe obiger Beitrag.
Dabei zählst du dann die Monatsbeiträge zusammen.
In etwa
Code:
double gesamtbetrag = 0;
for (int i = 0; i < beitraege.length; i++) {
  gesamtbetrag += beitraege[i];
}

Zu C)
Neue Methode.
Benutzt deine bisherigen Werte um den BWL-Krams auszurechnen
Gib das Berechnete auf der Konsole aus.
 
Zuletzt bearbeitet:
Ich hab jetzt mal Monatsbeitrag (der Einfacheit halber in "M" umbenannt) den Wert double zugewiesen.
Java:
       }

	   public static double [] liesDaten(){
    double p = 0.00, M = 0;
    int L = 0;
	   
	  for (int i=1; i<=L*12; i++) {
    if (L<=5 && M>=25) M++;
}
	   
	   return M;
	   }
	   
	   
			}


(Musste das "return" dalassen, da sonst eine Fehlermeldung, kommt, dass es vermisst wird)

Jetzt kommt aber trotzdem diese Meldung:

Bank.java:20: incompatible types
found : double
required: double[]
return M;

Was ist der Unterschied zwischen "double" und "double []"?
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Was ist der Unterschied zwischen "double" und "double []"?
double[] --> Array/Feld, also eine Menge von double-Werten
double --> eine einzelne double

Lies dir - sofern du mit Arrays Schwierigkeiten haben solltest - mal die Insel durch.

[EDIT]
Doch, aber was mache ich jetzt, damit die Fehlermeldung weggeht?
Dein Programm nochmal grundlegend durchdenken. Deine liesDaten-Methode soll ein Feld zurückgeben mit den ganzen mtl. Beiträgen. Also musst du früher oder später auch mal ein Feld bauen:
Java:
int n = laufZeit * 12;
double[] m = new double[n];
for (int i = 0; i < n; i++) {
    m[i] = <wasauchimmer>
}
return m;
[/EDIT]
 
Zuletzt bearbeitet:
Danke für die Hilfe, hier übrigens die Lösung:
Java:
import IOulm.*;

public class Bank{
   
   public static double[] liesDaten() {
      //maximale Anlagedauer: 5 Jahre = 60 Monate
      double[] zahlungen = new double[60];
      int i = 0;
      while(i < zahlungen.length && Urc.readDouble()) {
         zahlungen[i] = Urc.getDouble();
         i++;
      }
      return zahlungen;
   }

   public static double getEinzahlungen(double[] zahlungen) {
      double summe = 0;
      int i = 0;
      while (i < zahlungen.length && zahlungen[i] != 0) {
         summe = summe + zahlungen[i];
         i++;
      }
      return summe;
   }
   
   public static double getEndguthaben(double[] zahlungen, double p, int laufzeit) {
      double summe = 0;
      for (int i=1; i<=laufzeit; i++) {
         double erstesJahr = 0;
     
         //unterjaehrige Verzinsung
         for (int monat=0; monat<12; monat++) {
            int restmonate = 12 - monat; //bis Jahresende
            int index = (i-1)*12 + monat; //1. Jahr: 0..11; 2.Jahr: 12..23; ...
            double endwertMonat = zahlungen[index] * (1 + (p * restmonate)/12);
            //System.out.println("Monat " + index + ": " + endwertMonat);
            erstesJahr = erstesJahr + endwertMonat;
         }
         //System.out.println("Jahr " + i + ": " + erstesJahr);
     
         //Weiterverzinsung ueber die vollen Jahre
         erstesJahr = erstesJahr * Math.pow(1+p, laufzeit-i);
     
         //Gesamtsumme um Anteil des Jahres i erhoehen
         summe = summe + erstesJahr;
      }
      return summe;
   }
   
   public static void main (String[] args) {
      double[] daten = liesDaten();
      
      //Laufzeit bestimmen (Annahme: Vielfaches von 12)
      int laufzeit = 0;
      while(laufzeit < daten.length && daten[laufzeit] != 0) {
         laufzeit++;
      }
      laufzeit = laufzeit/12;
      
      System.out.println("Einzahlungsbetrag: " + getEinzahlungen(daten));
      System.out.println("Endguthaben: " + getEndguthaben(daten, 0.05, laufzeit));
   }
}
 

Neue Themen


Oben