Zinsrechnung

Status
Nicht offen für weitere Antworten.
S

Sushi

Gast
Ji, habe folgende Klasse:

public class Zinsen {
public static void main(String[] args) {
System.out.println(ertrag(200,5,8));
}


public static double[] ertrag(double betrag, int jahre, double zins){


double[]kapital ;
kapital = new double[jahre +1];


for (int i = 1; i <= jahre; i++) {
betrag = betrag * (100 + zins) / 100;
kapital = betrag;
}

return kapital;}
}


So eclipse zeigt mir auch keinen fehler mehr an. wenn ich nun auf run klicke kommt folgendes ergebnis in der konsole:

[D@3e25a5


vielleicht weiß jemand von euch wie ich das ding zum laufen bekomme^^


mfg Sushi
 
S

SlaterB

Gast
du gibst da ja ein Array aus,
quasi

System.out.println(double[]);

was willst du stattdessen sehen, alle Werte im Array kommagetrennt, in einer oder mehreren Zeilen, sortiert, formatiert, geliftet?

es wäre sicher nicht schlecht, wenn Java da irgendwas beliebiges lesbares hinzaubern würde,
aber überlebensnotwendig ist das auch nicht,
verwende eine for-Schleie und gib jeden Wert einzeln aus
 
G

Guest

Gast
ich möchte, dass die klasse mir dann ein array ausgibt mit dem inhalt {kapital am anfang, kanpital nach einem jahr, kapital nach 2 jahren,usw}
 
S

SlaterB

Gast
hab ich ja schon beantwortet oder ganz bequem:
java.util.Arrays.toString(array);
 
S

Sushi

Gast
also diese java.util.Arrays.toString(array); hatten wir noch nicht^^ keine ahnung was das ist.

Jedes element einzeln auszugeben habe ich auch schon probiert.

da müsste ich ja statt
return kapital

return ("kapital element " + i + " = " + kapital)

das problem ist dann kommt folgende meldung

i cannot be resolved.


danke schonmal für die tipps
 
S

SlaterB

Gast
du musst eine neue for-i bis jahre-Schleife verwenden, ohne das gehts nicht,
und du musst überlegen, ob das in der Methode vor dem retur passieren soll, dann ändert sich der Rückgabewert,
oder ob das die main-Methode machen soll
 
S

Sushi

Gast
eine 2. for schleife? also irgendwie bin ich gerade bischen überfordert sry XD
 

Schandro

Top Contributor
in der main methode speicherst du erst das, was deine ertrag-Methode returnt, in eine Variable. Dann machst du ne for-Schleife die die einzelnen elemente des arrays ausgibt.
 

Templon

Bekanntes Mitglied
Code:
public class Zinsen {
	public static void main(String[] args) {
		
		double[] ertrag = ertrag(200, 5, 8);
		
		for (int i = 0; i < ertrag.length; ++i) {
			System.out.println(ertrag[i]);
		}
	}

	public static double[] ertrag(double betrag, int jahre, double zins) {

		double[] kapital;
		kapital = new double[jahre + 1];

		for (int i = 1; i <= jahre; i++) {
			betrag = betrag * (100 + zins) / 100;
			kapital[i] = betrag;
		}

		return kapital;
	}
}

So z.B. =)
 
G

Guest

Gast
aso^^
ok dann probier ich das mal und sag dann bescheid wies gleuafen ist.


Echt spitzen forum mit super support
 
S

Sushi

Gast
super, danke jetzt spuckt er mir endlich ein richtiges ergebnis aus. jetzt schau ich nur noch, dass im ergebnis auch der anfangsbetrag drin steht. ( das will ich aber alleine schaffen^^)

Also danke an alle.


P.S. gleich mal nen Account hier anlegen.
 
S

Sushi

Gast
Ok die aufgabe get doch noch ein bischen schwerer weiter als gedacht.
und zwar soll man quasi das gleich nochmal für mehrere Spalten machen. in der gleichen Klasse folgende methode:

public static double[][] tabelle (double zins, double min, double max,
int jahre){

So meine überlegung war ich werde für dieses 2. dimensionale array
2 for schleifen brauchen eine für anzahl der jahre ( selbes wie oben denke ich)
und eine für die anzahl der zu berechnenden werte.
mein problem ist nun:
a)
wenn ich versuche ein array zu definieren wie folgt:
double[][]anlage;
anlage = new double [(max - min)/100 +1][jahre +1];

kann ich min und max aufgrund ihres types nicht benutzen. eine andere definition der länge des array fällt mir aber nicht ein

b)die verknüpfung bzw schreibweise zwischen den einzelnen for schleifen um am schluss ein 2 dim. array zu erhalten.

mfg Sushi
 
S

SlaterB

Gast
> anlage = new double [(max - min)/100 +1][jahre +1];

nicht so kompliziert, rechne

int x = ..;
int y = ..;
anlage = new double [x][y];

denk dir zwei Schleifen aus, i und j,
schreibe sie ineinander,
fertig
 
S

Sushi

Gast
hm aber int x kann ich ja nur angeben indem ich min und max benutze. das sind aber beides double werte und danns agt er mir sofort, dass ich diese nicht benutzen kann. ein anderer weg die anzahl der positionen anzugeben ohne min und max fällt mir nicht ein.

mfg Sushi
 
S

Sushi

Gast
ok habe mal weiter probiert nd folgendes ist dabei rausgekommen:

public class Zinsrechnung {
public static void main(String[] args) {
double[][]Tabelle = Tabelle(5,300,8000,5);

for (int i =0; i < Tabelle.length; ++i) {
for (int j = 0; j < Tabelle.length; ++j)
System.out.println(" Jahr "+ i +":" + Tabelle[j]);
System.out.println();}}





public static double[][] Tabelle (double zins, double min, double max,int jahre){

double betrag;
int x = 5;
int y = jahre +1;
double[][]anlage;
anlage = new double [x][y];

for (int i = 0; i <= max; i+=100){
min = min +100;
anlage[y]= min;
for (int j = 0;j <= jahre - 1; j++){
betrag = min * (100 + zins) / 100 ;
anlage[x][j]= betrag;
}}
return anlage;

}


allerdings stimmt da noch einiges nicht. ich bin mir nicht sicher ob ich die for schleifen richtig verknüpft habe und das array richtig ausgebe.
 
S

SlaterB

Gast
daswegen sollst du ja
int x = ..;
ausrechnen, das zwingt dich dazu, den double auf int zu runden,
denn ein Array mit 3 1/5 Feldern gibts nicht

nun kannst du natürlich sagen, dass dir generell das Runden fremd ist,
dann sage ich:

int x = (int) (..);
 
S

Sushi

Gast
XD jetzt hab ichs gerallt.

ok dann bleibt nur noch das lösen der for schleifen. den dies kann nicht stimmen:

for (int i = 0; i <= max; i+=100){
min = min +100;
anlage[y]= min;
for (int j = 0;j <= jahre - 1; j++){
betrag = min * (100 + zins) / 100 ;
anlage[x][j]= betrag;
}}
return anlage;


kennt jemand eine gute seite wo man erklärt bekommt wie man vorzugehen hat bei so einem array?
 
S

SlaterB

Gast
du meinst vielleicht

for (int i = 0; i <= max; i+=100){
min = min +100;
anlage[0]= min;
for (int j = 1;j <= jahre - 1; j++){
betrag = min * (100 + zins) / 100 ;
anlage[j]= betrag;
}}


lernen kann man sowas kaum,
wenn man ein Array durchlaufen kann ist der logische Schritt zu zwei ineinander verschachtelten Schleife eher eine Eigenleistung
 
S

Sushi

Gast
hm irgendwo ist immer noch der wurm drinnen.

public class Zinsen {
public static void main(String[] args) {
double[][]Tabelle = Tabelle(10,500,1000,4);

for (int i =0; i < Tabelle.length; ++i) {
for (int j = 1; j < ertragsTabelle.length; ++j)
System.out.println(" Jahr "+ i +":" + ertragsTabelle[j]);
System.out.println();}}








public static double[][] ertragsTabelle (double zins, double min, double max,
int jahre){
double betrag;
int x =(int)(max - min)/100 +1;
int y = jahre +1;
double[][]anlage;
anlage = new double [x][y];

for (int i = 0; i <= max; i+=100){
min = min +100;
anlage[0]= min;
for (int j = 1;j <= jahre - 1; j++){
betrag = min * (100 + zins) / 100 ;
anlage[j]= betrag;
}}
return anlage;

}

}

das ist jetzt die komplette methode. Als fehler gibt er mir an:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Geldanlage.ertragsTabelle(Geldanlage.java:45)
at Geldanlage.main(Geldanlage.java:4)


Ich habe zahlreiche tutorials und bücher zum thema array durchgemacht. In keinem waren auch nur ansatzweise hilfreiche besipiele angefügt. für mich, der noch nie etwas mit programmierung zu tun hatte, ist das natürlich nich gerade super. Mit den grundinformationen (deklaration usw) komm ich leider nicht besonders weit. Das heißt selbst üben üben üben... Ich hoffe auch, dass mir diese übung ein bischen verständnis für arrays bringt, damit ichd as nächste mal vlt auch ohne Hilfe auf die Lösung komme.
Aber ich finde es echt super, dass ihr hier anfängern helft.
 

Sushi

Mitglied
ups habe vergessen die alten bezeichnungen noch zu ändern.
ich hoffe ihr wisst trotzdem was gemeint ist^^
 
S

SlaterB

Gast
tja, das Array hat eine Länge von x und eine 'Breite' von y

wieso läuft dann die Schleife bis max bzw. bis jahre-1 und nicht nur bis x und y?
 

Sushi

Mitglied
hm das problem ist immer noch da. er verweist auf

anlage[j]= betrag;
und

double[][]Tabelle = Tabelle(5,300,800,4);
 
S

SlaterB

Gast
ist ja hoffnungslos, ich kann auch nicht alle Besonderheiten, die man bedenken muss, vorher sehen und erwähnen,

hier Generalüberholung:
Code:
public class Test
{
    public static void main(String[] args)
    {
        double[][] tabelle = ertragsTabelle(10, 500, 1000, 4);

        DecimalFormat df = new DecimalFormat("0.00");
        for (int i = 0; i < tabelle.length; ++i)
        {
            System.out.println("    Min: "+df.format(tabelle[i][0]));
            for (int j = 1; j < tabelle[i].length; ++j)
                System.out.println(" Jahr " + j + ": " + df.format(tabelle[i][j]));
            System.out.println();
        }
    }


    public static double[][] ertragsTabelle(double zins, double min, double max, int jahre)
    {
        double betrag;
        int x = (int)(max - min) / 100 + 1;
        int y = jahre + 1;
        double[][] anlage;
        anlage = new double[x][y];

        double zinsFactor = (100.0 + zins) / 100.0;
        for (int i = 0; i < x; i++)
        {
            min = min + 100;
            anlage[i][0] = min;
            betrag = min;
            for (int j = 1; j < y; j++)
            {
                betrag = betrag * zinsFactor;
                anlage[i][j] = betrag;
            }
        }
        return anlage;

    }


}
-----------
   Min: 600,00
 Jahr 1: 660,00
 Jahr 2: 726,00
 Jahr 3: 798,60
 Jahr 4: 878,46

   Min: 700,00
 Jahr 1: 770,00
 Jahr 2: 847,00
 Jahr 3: 931,70
 Jahr 4: 1024,87

   Min: 800,00
 Jahr 1: 880,00
 Jahr 2: 968,00
 Jahr 3: 1064,80
 Jahr 4: 1171,28

   Min: 900,00
 Jahr 1: 990,00
 Jahr 2: 1089,00
 Jahr 3: 1197,90
 Jahr 4: 1317,69

   Min: 1000,00
 Jahr 1: 1100,00
 Jahr 2: 1210,00
 Jahr 3: 1331,00
 Jahr 4: 1464,10

   Min: 1100,00
 Jahr 1: 1210,00
 Jahr 2: 1331,00
 Jahr 3: 1464,10
 Jahr 4: 1610,51
 

Sushi

Mitglied
danke schonmal für die lösung. damit ist wohl die aufgabe fertig. kennt hier jemand zufällig noch weitere Aufgaben für solche arrays würde gerne am wochenende noch bischen üben und finde leider nichts vergleichbares.
 

Sushi

Mitglied
eine frage habe ich noch. wie baue ich ein, dass wenn ungültige eingaben kommen z.b. -1 oder false kommen soll. das geht doch dann nur über if - else oder?
 

Sushi

Mitglied
public static double[][] ertragsTabelle (double zins, double min, double max,
int jahre){

double betrag;
int x = (int)(max - min) / 100 + 1;
int y = jahre + 1;
double[][] anlage;
anlage = new double[x][y];
anlage[0][0]= min;
min = min -100;
double zinsFaktor = (100.0 + zins) / 100.0;

if (min > max||zins < 0|| zins >=100||jahre < 1){

return null;}
else{

for (int i = 0; i < x; i++)
{
min = min + 100;
anlage[0] = min;
betrag = min;
for (int j = 1; j < y; j++)
{
betrag = betrag * zinsFaktor;
anlage[j] = betrag;
}
}
return anlage;

}
}
}

eingebaut ist es funktionieren tuts aber noch nich -.-
 
S

SlaterB

Gast
ich würde die Prüfung ganz an den Anfang schreiben, bevor du x usw. ausrechnest,

solange aber die main-Methode mit den Parametern fehlt,
kann man eh nicht sagen, ob das if aktiv werden sollte oder nicht
 

Sushi

Mitglied
ok habe grade mal durchlaufen lassen die methode ist endlich gemeistert^^

jetzt meldet sich aber die methode in der man nur einen betrag über einen zeitraum beobachten sollte (siehe seite 1)

folgende meldung:

Caused an ERROR
11
java.lang.ArrayIndexOutOfBoundsException: 11
at Geldanlage.ertragsZeile(Geldanlage.java:20)
at TestGeldanlageFunctionPublic.testZeile(TestGeldanlageFunctionPublic.java:94)
at TestGeldanlageFunctionPublic.testZeile(TestGeldanlageFunctionPublic.java:28)
 
S

SlaterB

Gast
ich habe grad 10 Sekunden hin und gescrollt und auch erfolglos nach 'ertragsZeile' gesucht,

möchtest du nicht lieber vollständige Fragen mit allem aktuellen Code, Parametern und sonstigen Eingaben formulieren?
 

Sushi

Mitglied
XD das kommt davon wenn man zuoft die bezeichnungen ändert. ich habe sie nun um es besser auseinanderhalten zu können ertragszeile genannt. es handelt sich hierbei um die ethode ertrag von seite 1
 
S

SlaterB

Gast
die damals (im ersten Posting) nach deinen Angaben funktioniere, bei mir im Test auch,
und nun soll sie auf einmal nicht mehr gehen?
soetwas passiert in dieser Welt nicht..


lass mich raten, du meinst gar nicht den Code vom ersten Posting,
sondern den nach Änderung aus Posting x und y mit den Parametern von Posting z

alles klar..,
ein weiteres Posting zum Thema 'was verstehe ich nicht' werde ich nicht schreiben,
demnächst kommt nur noch 'keine Ahnung wovon du redest'
 

Sushi

Mitglied
es ging um folgende methode:

public class Zinsen {
public static void main(String[] args) {

double[] ertrag = ertrag(200, 5, 8);

for (int i = 0; i < ertrag.length; ++i) {
System.out.println(ertrag);
}
}

public static double[] ertrag(double betrag, int jahre, double zins) {

double[] kapital;
kapital = new double[jahre + 1];
kapital[0] = betrag

for (int i = 1; i <= jahre; i++) {
betrag = betrag * (100 + zins) / 100;
kapital = betrag;
}

return kapital;


folgende meldung: testZeile took 0.002 sec
Caused an ERROR
11
java.lang.ArrayIndexOutOfBoundsException: 11


anscheinend stimmt irgendwas mit dem array und dessen inhalt nich. aber was...
 

Sushi

Mitglied
ich hab es herausgefunden:

das idiotische programm hat in der schleife i = 1 nicht angenommen.

musste erst i = 0 machen ne if else anweisung dran hängen dann hat ers gefressen.


Danke aber an alle und speziell an SlaterB dem ich jetzt wohl 1 millionen Euro schulde^^
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben