Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Java_Anfänger Gast
|
Verfasst am: 24. Apr 2005 01:00 Titel: java.lang.ArrayIndexOutOfBoundsException: 0 |
|
|
hallo,
ich bin ganz blutiger java anfänger und kämpfe mit folgendem problem: ich möchte eine java klasse testen, die die primzahlen (nach der methode des eratosthenes) berechnet. die klasse wurde uns als lösung zur verfügung gestellt, aber sie bricht mit
java.lang.ArrayIndexOutOfBoundsException: 101
at SiebEratosthenes.main(sieberatosthenes.java:17)
Exception in thread "main"
ab. ich habe nun nachgelesen, dass dies eine art overflow darstellt. aber warum? wie kann man denn sonst die variable max initialisieren? und eine noch ganz wichtige frage: wie könnte ich die klasse testen ohne auf diese fehlermeldung zu stossen???
ich würde mich riesig über jeden tipp/unterstützung freuen! danke! ciao k
public class SiebEratosthenes {
public static void main(String[] argv) {
int max=101;
boolean[] feld = new boolean[max];
int i;
for(i=2; i<max; i++) feld[i]=true;
feld[i]=false;
for(i=2; 2*i<max; i++) {
int j;
j=2;
while (i*j<max) {
feld[i*j]=false;
j++;
}
}
for (i=1; i<max; i++) if(feld[i]) System.out.println(i);
}
} |
|
Nach oben |
|
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 25. Apr 2005 10:43 Titel: Re: java.lang.ArrayIndexOutOfBoundsException: 0 |
|
|
Dieser Fehler tritt auf, wenn Du ein Array mit einer Adresse ansprichst, die es nicht hat. In Deinem Fall sprichst Du mit "101" die 102. Stelle des Arrays an (Bei 0 beginnend).
Habe den Kommentar in den Code geschrieben.
Code: |
public class SiebEratosthenes {
public static void main(String[] argv) {
int max=101;
boolean[] feld = new boolean[max];
int i;
// Diese Schleife zählt solange i kleiner 101 ist. Nach dem Verlassen der Schleife
// ist i=101 !!! sonst würde die Schleife ja nicht abbrechen
for(i=2; i<max; i++) feld[i]=true;
// i ist 101. Das feld[] geht aber nur von 0 bis 100 !
// Hier tritt Dein Fehler auf, diese Zeile ist unsinnig!
// feld[i]=false;
for(i=2; 2*i<max; i++) {
int j;
j=2;
while (i*j<max) {
feld[i*j]=false;
j++;
}
}
for (i=1; i<max; i++) if(feld[i]) System.out.println(i);
}
} |
Sieh Dir bitte unbedingt die genaue Funktionsweise von Schleifen an und bitte bitte verwende Schleifenvariablen nie! außerhalb der Schleife stattdessen lieber
Code: | for(int i=2; i<max; i++) feld[i]=true; | Damit vermeidest Du solche Fehler von vorherein
Ich hoffe Das hilft, Jan _________________
|
|
Nach oben |
|
|
|