Bei der Indexierung eines Arrays wird Integer verwendet. Aber in ein Long (max) kann auch eine Zahl wie 9999999999 stehen, welche über den Integer-Bereich hinausgeht. Du kannst also ein Array von Long's erstellen, aber die Länge des Arrays muss eine Integer Zahl sein. Je nach dem was du eigentlich willst könnte es helfen einfach nur der Methode keine long-Zahl, sondern int-Zahl zu übergeben
Vielen Dank. Das mit der Indexierung als integer Werte wusste ich nicht
Ich habe den Code nun verändert bekomme aber folgende Fehlermeldung:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2000002
at Sum_primes_array.sumPrimes(Sum_primes_array.java:15)
at Sum_primes_array.main(Sum_primes_array.java:5)
Heisst das, dass der Indexwert eine Grenze überschreitet? Kann ich somit keinen 2 Millionen Array anlegen?
Doch, du kannst ein Array einer Größe ("Länge") bis zu Integer.MAX_VALUE erzeugen. Das sind etwas über 2,4 Milliarden.
Die IndexOutOfBoundsException fliegt dir nicht bei der Erzeugung deines Arrays, sondern an einer Stelle wo du auf ein Fach zugreifen willst, dass es gar nicht gibt. Der Fehler liegt in deiner Schleife:
Code:
i=0; i<=max;i++
Es darf nicht
Code:
i <= max
heißen, sondern es muss
Code:
i < max
sein. Denn die Indizierung ist 0-basiert, d.h. das erste Fach hat Index 0. Somit hat das letzte Fach, in deinem Fall das 2000002-te Fach, den Index 2000001. Du zählst den Index also eins zu hoch allNumbers ist für i = max dann ein Zugriff auf das 2000003-te Fach des Arrays. Und das gibt es nicht.
Also merken:
x-tes Fach eines Arrays = array[x-1]. Bei Schleifen immer i bis < array.length laufen lassen und nie bis <=.
[c]int[] allNumbers = new int[max];[/c] - ich dachte du wolltest Variablen vom Typ long in deinem Array speichern?
Vielleicht hilft dir dieses Konstrukt?
Java:
publicclassSumPrimes{publicstaticvoidmain(String[] args){sumPrimes(2000000);}staticlongsumPrimes(int max){long sum =0;long[] allNumbers =newlong[max];// do something ...return sum;}}
(Klassennamen wie [c]Sum_primes_array[/c] sind in Java unüblich. Üblicher Weise verwendet man CamelCaseNamen, wie zum Beispiel [c]SumPrimesArray[/c]. Allerdings im Namen der Klasse irgendwelche Interna anzugeben, wie hier die Verwendung eines Arrays, ist nur in Ausnahmefällen sinnvoll. Weswegen ich das ganze für obiges Beispiel auf [c]SumPrimes[/c] gekürzt habe.)