int[] meinWochenlohn = {769, 588, 1245, 309, 388, 902}; int summe = 0; for ( int j=0; j<=6; j++ ) summe += meinWochenlohn[j];
Der Index j geht eine Zelle zu weit. Ein ArrayIndexOutOfBoundsException
wird
ausgelöst und das Programm wird angehalten.
Off-by-one Fehler sind sehr häufig. Ein laufendes Java Programm überprüft jeden Arrayindex bevor er verwendet wird, ob er sich innerhalb der Grenzen befindet.
for
-Schleifeclass MaxAlgorithmus
{
public static void main ( String[] args )
{
int[] array = { -20, 19, 1, 5, -1, 27, 19, 5 } ;
int max;
// das gegenwärtige Maximum initialisieren
max = array[0];
// das Array durchsuchen
for ( int element : array )
{
if ( array[ element ] > max ) // das gegenwärtige Element untersuchen
max = array[ element ]; // wenn es bis dahin das Größte ist, max ändern
}
System.out.println("Das Maximum dieses Arrays ist: " + max );
}
}
Java hat eine verbesserte for
-Schleife,
die jedes Arrayelement der Reihe nach durchläuft.
Sie vermeidet automatisch off-by-one Fehler.
Wir studieren das oben stehende Programm.
Dieses Programm macht das gleiche wie das vorherige Programm,
aber mit einer anderen Syntax.
Ein Doppelpunkt : trennt element
und array
.
(Das könnte im Browser schwer zu sehen sein.)
Wir lesen diesen Code wie:
"Für jedes element
im array
, ..."
Diese verbesserte for
-Schleife wird manchmal auch foreach-Schleife genannt.
Die verbesserte for
-Schleife
for ( int element : array ) { }
weist element
den Inhalt jeder Zelle des Arrays zu,
beginnend mit der Zelle Index 0 bis zur letzten Zelle.
Bei jeder Zuweisung wird der Schleifenkörper ausgeführt.
Mit der verbesserten for
-Schleife besteht keine Gefahr mehr,
dass der Index sich außerhalb der Grenzen befindet.
Muss die verbesserte for
-Schleife mit dem ersten Element des Arrays (Index 0)
beginnen?