Code-Problem java.lang.ArrayIndexOutOfBoundsException: 4 - Was ist das Problem?
Der volle Konsolen-Output:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at Dcoder.main(source.java:21)
Der Code der Probleme verursacht:
public static void main(String args[]) {
int T = 2;
boolean[] pass = new boolean[T*2];
int[] Marks = { 80, 80, 70, 60 };
if (1 <= T && T <= 10) {
for (int i = 1; i <= T * 2; i++) {
if (80 < Marks[i] && Marks[i] <= 100) {
pass[i] = true;
}
else {
pass[i] = false;
}
}
}
}
Ich bin der Meinung, dass irgendetwas mit dem boolean-Array nicht stimmt ...
5 Antworten
for(int i = 1; i <= T * 2; i++)
Die Indizierung eines Array beginnt bei 0 und endet folglich bei n-1, also bei einer Größe von 2T bei 2T-1. Der Index 2T ist out of bounds.
Entschuldige dafür. Hier nochmal der Code mit Tabs.
public static void main(String args[])
{
int T = 2;
boolean[] pass = new boolean[T*2];
int[] Marks = {80, 80, 70, 60};
if(1 <= T && T <= 10) {
for(int i = 1; i <= T * 2; i++) {
if(80 < Marks[i] && Marks[i] <= 100) {
pass[i] = true;
}
else {
pass[i] = false;
}
}
}
}
Wenn das Programm versucht, auf eine Index-Stelle zuzugreifen die negativ oder größer als der Array selbst ist, wird dieses Exception geworfen.
Dabei sei zu beachten, dass der Index eines Arrays mit 0 beginnt.
0 -> 1. Indexeintrag
1 -> 2. Indexeintrag
2 -> 3. Indexeintrag
...
Nun viel Glück beim Finden des Fehlers. Das sind alle Infos, die Du dafür brauchst.
EDIT: Okay, Du hast es anscheinend schon gelöst... Super
Ich hab den Fehler gefunden.
Der Array für Marks waren vier zahlen. Aber in der For Schleife hieß es T*2 zählt also hoch bis vier nicht 3 (0,1,2,3) man hängt einfach nur noch ein -1 an das T*2 und das wars schon. Danke trotzdem.
Sehr gut, aber keine Angst: Dieser Fehler passiert häufig, aber ist einfach zu finden & zu lösen.
Der Fehler ist in zeile 21, ich kann aber mit diesem Code snippet nicht sagen welches zeile 21 ist.