zur vorherigen Seite  zum Inhaltsverzeichnis   zur nächsten Seite

Antwort

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.

Verbesserte for-Schleife

class 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.


FRAGE 14:

Muss die verbesserte for-Schleife mit dem ersten Element des Arrays (Index 0) beginnen?

zur vorherigen Seite  zum Inhaltsverzeichnis   zur nächsten Seite