"Grundkurs Programmieren in Java - (8. Auflage, 2018)"
2001-2018, Carl Hanser Verlag

Lösungsvorschlag zu Aufgabe 5.8 (Version 3.0)

(c) 2001-2018 D. Ratz, D. Schulmeister-Zimolong, D. Seese, J. Wiesenberger

a.)

Syntaktische bzw. semantischer Fehler: der Compiler gibt beim Übersetzen eine Fehlermeldung aus.
  1. Der Rückgabetyp der Funktion müßte double sein, da das Ergebnis von Math.pow(x,2) vom Typ double ist. Richtig wäre:
           public double quadrat (double x) {
             return Math.pow(x,2);
           }
           
  2. Es wird eine 2-dimensionale Matrix deklariert, die Initialisierungs-Liste ist aber nur 1-dimensional. Korrekt ist:
           double[][] matrix3x3 = { {1.0, 2.0, 3.0},
                                    {4.0, 5.0, 6.0},
                                    {6.0, 8.0, 9.0}  };
           
  3. Der double-Literal 3.1e5 ist zulässig (3.1e5=3.1*10^5), auch die Bezeichner out und println sind erlaubt (unser println z.B. hat ja einen ganz anderen Sichtbarkeitsbereich als das println in System.out.println. Fehlerhaft ist die Schreibweise von System (Anfangsbuchstabe klein geschrieben):
           double out = 3.1e5, println = 0.5;
           System.out.println(out + println);
           

b.)

Fehlerhaftes Laufzeitverhalten: die Programme lassen sich anstandslos übersetzen, während der Programmausführung tritt aber ein Laufzeitfehler auf.
  1. Endlosrekursion - der einfache Fall n = 1 wird nicht behandelt
  2. Index out of bounds - wegen ++i wird auf nicht-exist. Komponente z[z.length] zugegriffen