PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Zweidimensionales Array, wo ist der Fehler?


mobius
2006-11-18, 20:50:45
Hallo Leute,

hab folgendes kleines Java Anfängerproblem:

final int BREITE = 19;
final int HOEHE = 4;
char [][] matrix = new char [BREITE][HOEHE];

for (int i = 0; i <= BREITE; i++) {
for (int j = 0; j <= HOEHE; j++) {
matrix[i][j] = ' ';
}
}

Das Programm steigt immer mit folgender Fehlermeldung aus:
java.lang.ArrayIndexOutOfBoundsException: 4
at Zeichenflaeche.main(Zeichenflaeche.java:18)

Markiert wird dabei die Zeile matrix[i][j] = ' ';
Anscheinend überschreitet er den Index, aber warum sollte das geschehen?

Steh irgendwie auf dem Schlauch bei dem Fehler, programmiere mit Java erst ein paar Tage.

Danke für eure Hilfe.

AtTheDriveIn
2006-11-18, 20:54:32
Ich denke, dabei bin ich in Java nicht fit, das du einfach mit <= eine Bereichsüberschreitung machst, so wäre es jedenfalls in C/C++.

Ein Array a[20] hat 20 Elemente mit den Index 0-19. Bei a[20] verlässt du den Bereich und der Complier meckert.

Ganon
2006-11-18, 20:54:43
0 - 4 sind 5 Felder, dein Array hat aber bloß 4. ;) Statt <= musst du < schreiben.

@AtTheDriveIn

[klugscheiß]
Der Compiler meckert nicht, sondern die RunTime :D
[/klugscheiß]

In C++ würde er auch nicht meckern, da keine Bereichsprüfung dort erfolgt. Das verhalten ist abhängig vom Betriebssystem. Entweder steigt das Programm aus (der der Bereich danach geschützt ist), oder er lässt es einfach zu.

AtTheDriveIn
2006-11-18, 21:02:03
0 - 4 sind 5 Felder, dein Array hat aber bloß 4. ;) Statt <= musst du < schreiben.

@AtTheDriveIn

[klugscheiß]
Der Compiler meckert nicht, sondern die RunTime :D
[/klugscheiß]

In C++ würde er auch nicht meckern, da keine Bereichsprüfung dort erfolgt. Das verhalten ist abhängig vom Betriebssystem. Entweder steigt das Programm aus (der der Bereich danach geschützt ist), oder er lässt es einfach zu.

Recht hast du. Hab da jetzt nicht so genau unterschieden. ;)

mobius
2006-11-18, 21:05:15
lol danke Jungs, ihr hattet recht. Hatte auch noch die Felder verkehrtrum eingerichtet ^^''. Man ich bin wohl echt was zu müde für Java heute. Bin etwas Delphi geschädigt, also denkt nicht zu schlecht von mir ;)

HellHorse
2006-11-18, 23:28:04
Für Faule gäbe es noch Arrays.fill (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#fill(char[],%20char)). Geht allerdings nur für 1d-Arrays, spart also nur einen Loop.