java.lang.ArrayIndexOutOfBoundsException

iJerkface

Lieutenant
Registriert
März 2012
Beiträge
665
Hallo ,
bei einer Übung ist mir die in der Überschrift gegebene Fehlermeldung aufgetaucht.

Der Code sieht folgendermaßen aus :

Code:
import java.util.*;
import java.lang.Math;
import java.lang.String;
public class Übung
{
   
    public int Jahre; // Anzahl der Jahre zur Angabe der Array-Länge.
    public double zSatz;
    public double q;
    public double Faktor;
    
    Scanner sc= new Scanner(System.in); // Scanner wird erstellt.
     
    public Übung()
    {
       System.out.println("Gib die Anzahl der zu berechnenden Jahre an");
       Jahre = sc.nextInt(); // Die Nutzereingabe wird in der Variable "Jahre" gespeichert.
       double[] a = new double[Jahre]; // Ein neuer Array mit dem Werte der Variable "Jahre" als Anzahl der "Speicherplätze" wird erstellt.
       System.out.println("Gib dein Startkapital an "); 
        a[0] = sc.nextDouble();/* Das Startkapital wird wie gewuenscht and der ersten Stelle des Arrays
        gespeichert. a[0] , da dies die erste Stelle des Arrays ist.*/
       System.out.println("Gib deinen Zinssatz an "); // Selbsterklärend
       zSatz = sc.nextDouble();// User gibt seinen Zinssatz als Double an
       for(int i=1 ; i<= a.length ; i++) // eine Schleife wird gestartet , es werden die Daten für jedes einzelne Jahr ausgerechnet , bis der Zähler die Länge des Arrays , also dem max. Speicher erreicht.
       {
        q=1+(zSatz/100); // Es wird der Faktor q bestimmt , also die "1.xx"-Zahl welche das prozentuale Wachstum vertritt.
        Faktor= Math.pow(q , i); /* Es wird der Faktor errechnet , mit dem das Grundkapital multipliziert wird um das derzeitige Kapital zu bestimmen. Mit Math.pow wird das Wachstum q mit der Anzahl der 
        Jahre "i" potenziert.*/
        a[i]= a[0]*Faktor; // Da "i" das zu berechnende Jahr angibt , wird das erste errechnete Kapital automatisch auf den ersten (bzw realen zweiten) Platz des Arrays gespeichert. Das Zweite auf den 2. usw.
        
       }
       System.out.println(a);
    }

  
}

Klar ist , dass wohl falsch auf den Array zugegriffen wird , nur inwiefern?

MfG
 
Die For-Schleife darf nur bis i < a.length gehen. Ich nehme an, es ist auch beabsichtigt, dass diese bereits bei i=0 starten soll.
 
Nachdem in a[0] der Startwert steht, wohl eher nicht. Aber damit der Kommentar passt, sollte wohl a die Länge Jahre+1 bekommen.

System.out.println(a) wird übrigens auch wenig ergiebig sein.

Den "Gesamtfaktor" in jedem Schritt auszurechnen halte ich auch für wenig sinnvoll, da ja der Stand aus dem Vorjahr jeweils bekannt ist.
 
Danke
 
Zurück
Oben