Informatik

Rückgabewerte

Bisher haben deine Methoden etwas getan – gezeichnet oder ausgegeben. Jetzt sollen sie etwas liefern, mit dem du weiterrechnen kannst.

Wieder ein schlechtes Beispiel

Lies das Programm und beschreibe, was daran unpraktisch ist. Denk daran, was du mit den drei Ergebnissen anschließend noch machen könntest.

Auflösung

Die Methode gibt aus statt zu liefern. Damit ist das Ergebnis für das aufrufende Programm verloren:

  • Du kannst die drei Summen nicht addieren.
  • Du kannst nicht prüfen, ob eine davon größer als 1000 ist.
  • Du kannst sie nicht in einer Datei speichern oder auf die Bühne zeichnen.

Die Methode legt außerdem gleich zwei Dinge fest: wie gerechnet wird und wie ausgegeben wird. Das sind zwei verschiedene Zuständigkeiten.

Die Lösung: return

  • Statt void steht jetzt der Rückgabetyp vor dem Methodennamen: int summeBis(...).
  • Die Anweisung return summe; beendet die Methode sofort und liefert den Wert zurück.
  • Der Aufruf summeBis(5) ist danach ein Ausdruck mit einem Wert – du kannst ihn überall verwenden, wo eine Zahl stehen darf.
  • Jeder Weg durch die Methode muss auf ein return treffen, sonst meldet die IDE einen Fehler.

Wann mit, wann ohne Rückgabewert?

Entscheide für jede Methode, ob sie besser mit oder ohne Rückgabewert gebaut wird. Begründe.

a) Den Flächeninhalt eines Kreises bestimmen

b) Eine Willkommensmeldung anzeigen

c) Prüfen, ob eine Zahl eine Primzahl ist

d) Einen Baum auf die Bühne zeichnen

e) Den größeren von zwei Werten ermitteln

Auflösung
Rückgabewert? Begründung
a) Kreisfläche ja, double ein Ergebnis, mit dem weitergerechnet wird
b) Willkommensmeldung nein, void die Wirkung ist die Ausgabe
c) Primzahltest ja, boolean das Ergebnis wird für eine Entscheidung gebraucht
d) Baum zeichnen nein, void die Wirkung ist die Zeichnung
e) Größerer Wert ja, int ein Ergebnis, das weiterverwendet wird

Faustregel: Berechnet die Methode etwas, gib es zurück. Bewirkt sie etwas (Ausgabe, Zeichnung), reicht void.

Wer beides in einer Methode vermischt, macht sie schwerer wiederverwendbar.

Methoden, die Wahrheitswerte liefern

Zwei Dinge lohnen sich hier anzuschauen:

  1. return pZahl % 2 == 0; – der Vergleich ist schon ein boolean. Ein if (…) return true; else return false; wäre umständlicher und sagt dasselbe.
  2. In istPrimzahl steht return false; mitten in der Schleife. Sobald ein Teiler gefunden ist, steht das Ergebnis fest – die Methode bricht sofort ab. Das ist ein häufiges und gutes Muster.

Aufgabe 1: Methoden mit Tests prüfen

Ab jetzt kannst du deine Lösungen selbst prüfen. Die Online-IDE bringt einen Testrunner mit: Eine Klasse mit @Test enthält Testmethoden, die deine Methode aufrufen und das Ergebnis mit dem erwarteten vergleichen.

Ergänze die drei Methoden so, dass alle Tests grün werden.

Wechsle dazu unten in den Reiter Testrunner und klicke auf Alle Tests.

Tipp 1: maximum

Eine Verzweigung genügt. Oder – noch kürzer – du gibst direkt zurück, was größer ist.

Tipp 2: quersumme

Denk an die Zusatzaufgabe aus Kapitel 1: Die letzte Ziffer bekommst du mit % 10, und mit / 10 wirst du sie los. Wiederhole das, solange noch etwas übrig ist.

Achte auf den Testfall quersumme(0) – deine Schleife darf dann null Mal laufen.

Tipp 3: istTeilbar

Eine Zeile. Du hast das Muster gerade bei istGerade gesehen.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 2: Eigene Tests schreiben

Schreibe eine Methode istPalindrom(String pWort), die zurückgibt, ob ein Wort ein Palindrom ist. Den Algorithmus kennst du aus Kapitel 3 – jetzt steckt er in einer Methode mit Rückgabewert.

Ergänze außerdem die Testklasse um eigene Testfälle. Denk dabei besonders an Sonderfälle:

  • das leere Wort
  • ein Wort aus einem Buchstaben
  • ein Wort mit gerader Buchstabenzahl
Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Zusatzaufgabe

Schreibe eine Methode ggt(int pA, int pB), die den größten gemeinsamen Teiler zurückgibt – nach dem euklidischen Algorithmus aus Kapitel 3.

Schreibe dazu eine Testklasse mit mindestens fünf Testfällen. Überlege dir dabei ausdrücklich, welche Sonderfälle es gibt: Was soll herauskommen, wenn eine Zahl 0 ist? Wenn beide gleich sind?


Selbsttest

Rückgabewerte

Teilbare URL erstellen

Abschnitte auswählen