Eine gute Antwort könnte sein:

  1. Wird das Programm (mit diesem klassischen Bug) das korrekte Maximum der Daten ,wie es in der Initialisierungsliste gegeben ist, finden?
    • Ja—für das spezielle Set 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

Mit einer zehn-elementigen Initialisierungsliste wird das fehlerhafte Programm in einem 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 einem 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 MinAlgorithm
{

  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