ArrayIndexOutOfBonds?

peterklaus

Mitglied
Hallo, ich habe ein Problem und zwar funktioniert mein Programm soweit, aber in der Schleife
Code:
double Gesamttagesdifferenzen = 0;
40	int z = 0;
41	do{
42		Gesamttagesdifferenzen +=(Tagesdifferenzen.get(z)+Tagesdifferenzen.get(z+1));
43		z = z+1;
44	}while (z < Tageszaehler2);

kommt folgende Fehlermeldung:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at StockEstimation.main(StockEstimation.java:42)

Woran liegt das?

Gruß Peter-Klaus
 

Sonecc

Gesperrter Benutzer
TagesDifferenzen (variablen benennt man mit einem kleinen Buchstaben am anfang) hat nur 1 Element, du sprichst aber 2 an.

Was da passiert ist folgendes:

Java:
                         Tagesdifferenzen.get(0)+Tagesdifferenzen.get(0+1)
Gesamttagesdifferenzen +=(Tagesdifferenzen.get(z)+Tagesdifferenzen.get(z+1));

...get(0) spricht das erste (und einzige) Element an, während ...get(0+1) das zweite Element anspricht, was aber nicht vorhanden ist
 

peterklaus

Mitglied
Ich lasse aber in die Tagesdifferenzen mehr Werte einlesen
Code:
do {

	Tagesdifferenzen.add((Tageswerte.get(a) - Tageswerte.get(a + 1)));
	a = a+1;
	
	 
	}while (a < Tageszaehler);

Pro "Tag" wird ein Wert eingelesen also man kann Quasi so viele werte eingeaben wie man will und der Tageszähler gibt zurück wie viele eingeben wurden.

Speicher ich das irgendwie falsch ab??
 
S

SlaterB

Gast
du hast genau Tageszaehler Elemente in der Liste,

deine Schleife
do { } while (z < Tageszaehler2);
erlaubt aber auch einen Durchlauf mit z == Tageszaehler2-1,
wenn Tageszaehler2 gleich Tageszaehler dann greifst du auf das den Index z = Tageszaehler-1 zu, korrekt und noch z+1, also Tageszaehler,
das ist zu hoch

leicht anders ausgedrückt:
die a und die z-Schleife laufen gleich, a füllt aber nur a, während z vorauseilend auf z+1 zugreift
 

ARadauer

Top Contributor
Java:
int z = 0;
do{
  Gesamttagesdifferenzen +=(Tagesdifferenzen.get(z)+Tagesdifferenzen.get(z+1));
   z = z+1;
}while (z < Tageszaehler2);

sowas schreibt man eher so...
Java:
for(int i = 0; i <Tageszaehler2; i++){
}
 

Oben