einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen

LaraMCS

Mitglied
Hallo zusammen,
(ich hoffe ich bin richtig, aber ich habe bisher nichts gefunden was besser passt)
also mein Problem ist folgendes:
Ich möchte gerne eine Methode erstellen, die ein Array füllt und später zurück gibt. In das Array soll an die erste Stelle mein Anfangswert. In die nächste Stelle soll die Summe aus dem Wert der vorrigen Stelle und einem gewissen Prozentsatz des Anfangswertes sein. Und das für jede Stelle des Arrays, sodass eine Berechnung von Zinswachstum ensteht. (Ich hoffe das ist verständlich)
Bisher habe ich das folgende:
Java:
//Array erschaffen das "ausgefuellt" und uebergeben wird
double [] Berechnung = new double [years +1];
for (int y = 1; y < years + 1; y++) {
	Berechnung [0] = amount;
//die naechste Stelle im Array ist die Summe aus der vorrigen Stelle und dem Zinssatz aus dem Anfangswert
	Berechnung [y] = Berechnung [y-1] + (amount * interest);
	}
(years = Die Laufzeit, also die Länge des Arrays
amount = Startwert
interest = Prozentwert
Diese Werte wurden vorher in einem Scanner abgefragt)
Nun soll da z.B. eigentlich rauskommen:
500.0 550.0 600.0 650.0 700.0 usw.
bei mir kommt aber:
500.0 550.0 605.0 665.5 732.0500000000001

Ich finde meinen Fehler einfach nicht 🙁 ???:L


Außerdem möchte ich beim Einlesen meiner Werte mit einem Scanner bestimmte Werte ausschließen.
Bei dem Startwert zum Beispiel 0.
Geht das irgendwie?

Ich bin wirklich dankbar für jede Hilfe.
Ich sitze seit Stunden vor meinem PC und starre Eclipse an und komme mir dümmer vor als ein Toastbrot. ;(
Danke schonmal.
 
500.0 550.0 605.0 665.5 732.0500000000001
Sieht aus wie Anfangswert=500 und Prozentsatz=10

[0] = 500
[1] = [0] + [0]*(0.1)
[1] = [1] + [1]*(0.1)
...

Das ist nicht gewollt? Hätte ich aber aus deiner Beschreibung so verstanden
Ausserdem kannst du
Code:
Berechnung[0] = amount;
direkt vor die Schleife schreiben, das braucht ja nur 1x ausgeführt zu werden.
[EDIT]ah sehe du hast ja jedesmal AMOUNT*INTEREST .. lass mich mal weiter schauen 🙂[/EDIT]
 
Zuletzt bearbeitet:
Bei mir funktioniert dein Code tadellos!
Java:
for (int y = 1; y < years + 1; y++) {
	Berechnung[y] = Berechnung[y - 1] + (amount * interest);
	System.out.println(Berechnung[y]);
}
550.0
600.0
650.0
700.0
750.0
800.0
850.0
900.0
950.0
1000.0
 
Zuletzt bearbeitet:
Danke erstmal!
Wenn ich den Code ohne Zusammenhang eingebe funktioniert er bei mir auch. Im Moment glaube ich mein Fehler liegt wo anders kann mir aber nicht erklären warum ...
Die Aufgabe ist etwas komplexer: der Benutzer soll außerdem eine Verzinsunsart auswählen können. Dafür hab ich einen boolean eingeführt und befürchte Momentan, dass dieser nie false wird ...
Hier der Coder mit mehr "Zusammenhang":
Java:
//Abfrage der Zinsart
		System.out.println("Geben Sie eine Zinsart ein (Zinseszins = 1 oder einfache Verzinsung = 2).");
		double isCompoundS = sc.nextDouble();
		//ist eine richtige Zinsart eingegeben?
		for (int pruefen4 = 1; pruefen4 <= 1; pruefen4 = pruefen4 * 1) {
		if (isCompoundS == 1 || isCompoundS ==2) {
			pruefen4 = 5;
		} else {
			System.out.println("Sie haben keine Zinsart gewählt, bitte geben Sie eine Zinsart ein.");
			isCompoundS = sc.nextDouble();
		}
		}
		//Zinsart in boolean umwandeln
		boolean isCompound;
		if (isCompoundS == 1) {
			isCompound = true;
		} else {
			isCompound = false;
		}
		//Array erschaffen und calculateInterest aufrufen
		double [] Leistungen = calculateInterest (amount, years, interest, isCompound);
		for (int i = 0; i < Leistungen.length; i++) {
		System.out.print(Leistungen[i] + " ");
		}
	}
	
	//neue Methode zur Berechnung
	public static double[] calculateInterest (double amount, int years, double
			interest, boolean isCompound) {
		
		//Array erschaffen das "ausgefuellt" und uebergeben wird
		double [] Berechnung = new double [years +1];
		
		//pruefen welche Verzinsungsart ausgewählt wurde
		if (isCompound = true) { //Zineszins
			for (int x = 1; x < years + 1; x++) {
				//an der 1. Stelle des Arrays steht immer der Anfangsbetrag
				Berechnung [0] = amount;
				//die naechste Stelle im Array ist die Summe aus der vorrigen Stelle und dem enstprechenden Zinssatz von dieser Stelle
				Berechnung [x] = Berechnung [x-1] * (1 + interest);
			}
		} else { //einfache Verzinsung
			for (int y = 1; y < years + 1; y++) {
				Berechnung [0] = amount;
				//die naechste Stelle im Array ist die Summe aus der vorrigen Stelle und dem Zinssatz aus dem Anfangswert
				Berechnung [y] = Berechnung [y-1] + (amount * interest);
			}
		}
		
		return Berechnung;
	}

ich hoffe es ist halbwegs verständlich
 
ok mir hat anscheinend in der if-Bedinung ein = gefehlt deswegen wurde mein boolean nie false und dann konnte ich natürlich nie in die else-Bedingung kommen ...
:bloed:

Naja das mit den Werten beim Einlesen hab ich jetzt durch die for-Schleife gelöst, damit prüft er immer wieder, ob der Wert erlaubt ist.
 
Java:
for (int pruefen4 = 1; pruefen4 <= 1; pruefen4 = pruefen4 * 1) {
        if (isCompoundS == 1 || isCompoundS ==2) {
            pruefen4 = 5;
        } else {
            System.out.println("Sie haben keine Zinsart gewählt, bitte geben Sie eine Zinsart ein.");
            isCompoundS = sc.nextDouble();
        }
}
Dieses Konstrukt sieht für seine Funktion ein wenig wirr aus.

Erstmal:
Code:
for (int pruefen4 = 1; pruefen4 <= 1; pruefen4 = pruefen4 * 1)
könnte auch heissen:
Code:
while (pruefen4 == 1) { ... }
Andererseits brauchst du aber pruefen4 gar nicht, denn der Wert von isCompoundS ist ja interessant und ausreichend für eine Prüfung:
Code:
while ((isCompounds < 1) || (isCompounds > 2)) { <erneut abfragen> }

Und statt sc.nextDouble kannst du ja nextInt verwenden, denn als Eingabe erwartest du ja auch einen Ganzzahlwert (1 oder 2)
 
Zuletzt bearbeitet:

Zurück
Oben