Eine gute Antwort wäre:

  1. Wird das Programm (mit diesem klassischen Bug) das korrekte Maximum der Daten, wie es in der Initialisierungsliste gegeben ist, finden?
    • Ja — für diese spezielle Liste von Daten wird das Programm das korrekte Maximum berechnen.
  2. Wann wird das Programm nicht korrekt arbeiten?
    • Wenn das größte Element des Arrays sich im letzten Slot befindet (und nur einmal im Array vorkommt).
  3. Ist es offensichtlich, dass es einen Bug gibt?
    • Nein — für die meisten Daten arbeitet das Programm OK. Wenn es nur ein paar Mal getestet worden wäre, könnte es jeden Test bestehen.

Minimum in einem Array feststellen

Bei einer Initialisierungsliste mit 10 Elementen wird das fehlerhafte Programm in einen von zehn Fällen fehlschlagen (eine Liste von Zufallszahlen vorausgesetzt). Es müsste noch nicht einmal klar sein, dass es fehlschlug, weil die errechnete Antwort nahe am Maximum ist. Mit einem Array von zehntausend Elementen (keine ungewöhnliche Länge) wird das Programm in einen von zehntausend Fällen fehlschlagen! Off-by-one Fehler können sehr subtil sein.

Hier ist ein Programm, das das Minimum eines Array feststellt. Es ähnelt in seinem grundsätzlichen Aufbau dem Maximum-Programm:

class MinAlgorithmus
{

  public static void main ( String[] args )
  {

    int[] array =  { -20, 19, 1, 5, -1, 27, 19, 5 } ;
    int   min;

    // das gegenwärtige Minimum initialisieren
    min = ___________

    // das Array durchsuchen
    for ( int index = 0; index < array.length; index++ )
    {
      _________________

        _________________

    }

    System.out.println("Das Minimum dieses Arrays ist: " + min );
  }
}

FRAGE 11:

Füllen Sie die Lücken aus. Klicken Sie hier für einen .
Inhaltsverzeichnis