Compile time Fehler

exercise No. 247

F:

Wir betrachten:

/**
 * Get the largest of three values
 *
 * @param a First value
 * @param b Second value
 * @param c Third value
 * @return The maximum of a, b and c
 */
public static int max (int a, int b, int c) {
  if (a < b) {
    if (b < c) {
      return c;
    } else {
      return b;
    }
  } else {
    if (a < c) {
      return c;
    }
  }
}
  1. Im obigen Code sind drei return Anweisungen vorhanden. Erklären Sie, warum es trotzdem eine Compile time Fehlermeldung »Missing return statement« gibt.

  2. Korrigieren Sie sowohl den syntaktischen als auch inhaltliche Fehler.

A:

  1. Falls gleichzeitig a > b und a > c gilt, wird keine return Anweisung erreicht. Dies ist unzulässig: Eine Methode mit nicht-leerem Rückgabetyp muss stets einen Wert zurückgeben.

  2. Zur Lösung ergänzen wir die fehlenden Fälle:

    public static int max (int a, int b, int c) {
        if (a < b | a < c) {
            if (b < c) {
                return c;
            } else {
                return b;
            }
        } else {
            return a;
        }
    }