Methoden – Schreibtischtest
Informatik · Gymnasium · Klassen 9–13 · PRIMM-Methode
🎯 Worum geht's? Klasse 10–13 · 1 Unterrichtsstunde
Nach dieser Seite kannst du …
- verfolgen, welche Werte als Parameter an eine Methode übergeben werden
- den Rückgabewert einer Methode bestimmen
- den Programmablauf mit mehreren Methodenaufrufen nachvollziehen
Vorwissen: Variablen, Bedingungen, Schleifen
📝 Aufgaben
Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.
📖 Themenübersicht
| Konzept | Beispiel | Bedeutung |
|---|---|---|
| Methodensignatur | int add(int a, int b) |
Rückgabetyp, Name, Parameterliste |
| void-Methode | void drucke(String s) |
Kein Rückgabewert |
| return | return x * 2; |
Gibt Wert zurück, beendet Methode |
| Aktualparameter | add(3, 7) |
Werte beim Aufruf |
| Formalparameter | int a, int b |
Namen in der Definition |
| Call-by-Value | f(x) – x bleibt unverändert |
Kopie wird übergeben |
| Überladen | add(int,int) und add(double,double) |
Gleicher Name, andere Parameter |
| Rekursion | f(n) = n * f(n-1) |
Methode ruft sich selbst auf |
| Lokale Variable | int x = 5; (in Methode) |
Nur im eigenen Block sichtbar |
| Globale Variable | static int z; (in Klasse) |
In allen Methoden sichtbar |
🏅 Zuletzt verdiente Badges
💡 Aufbau einer Methodensignatur
Rückgabetyp methodenName ( Typ param1, Typ param2, … )Der Rückgabetyp steht ganz links.
void bedeutet: kein Rückgabewert.
Die Parameterliste enthält immer Typ und Name.
Welchen Rückgabetyp hat
double berechne(int n, double x)?
Wie viele Parameter hat
void druckeMatrix(int[][] m, boolean header)?
Welche Signatur ist in Java ungültig?
Trage für jede Methode den korrekten Rückgabetyp und die Anzahl der Parameter ein.
| Signatur | Rückgabetyp | Anzahl Param. |
|---|---|---|
| int max(int a, int b) | ||
| void reset() | ||
| String join(String a, String b, char sep) | ||
| boolean istPrim(int n) | ||
| double[] normiere(double[] v) |
Darf eine Methode denselben Namen wie ein Parameter haben?
Was ist der Unterschied zwischen Signatur und Kopf einer Methode?
Die Signatur ist falsch. Korrigiere Rückgabetyp und Parameternamen so, dass die Methode zwei int-Werte addiert und das Ergebnis zurückgibt.
void einen Rückgabetyp. Jeder Parameter braucht Typ und Namen.
Schreibe die vollständige Signatur und Implementierung von
potenz: Basis (double) hoch Exponent (int), Rückgabe double.
Für potenz(2.0, 3) → 8.0.
double, Parameter double basis, int exp. Starte mit 1 und multipliziere exp-mal mit der Basis.Aufruf: int r = geheim(12); – Welchen Wert hat r?
Bestimme den Rückgabewert für jeden Aufruf.
| Aufruf | Rückgabewert |
|---|---|
| geheim(1) | |
| geheim(6) | |
| geheim(10) | |
| geheim(15) | |
| geheim(20) |
Was passiert, wenn eine nicht-void-Methode kein
return hat?
Darf nach einem return
noch Code stehen?
Ergänze ein frühzeitiges return: Wenn n <= 0,
soll sofort 0 zurückgegeben werden.
return zurückgeben.
Implementiere stellenSumme: Gibt die Quersumme einer nicht-negativen
ganzen Zahl zurück. stellenSumme(123) → 6.
n % 10 liefert die letzte Ziffer, n / 10 entfernt sie. Wiederhole das, solange n größer als 0 ist.
Aufruf: System.out.println(kombiniere("Ha", "llo", 3));
Bestimme die Ausgabe für jeden Aufruf.
| Aufruf | Ausgabe |
|---|---|
| kombiniere("A","B",1) | |
| kombiniere("xy","!",2) | |
| kombiniere("","Z",4) |
prefix wird n-mal hintereinander gehängt, danach kommt einmal suffix.Was sind Aktualparameter?
Müssen Aktual- und Formalparameternamen übereinstimmen?
Ergänze einen vierten Parameter trennzeichen (char),
der zwischen je zwei Wiederholungen eingefügt wird.
kombiniere("Ha","!",3,'-') → Ha-Ha-Ha!
char trennzeichen. Das Trennzeichen kommt nach jeder Wiederholung – außer nach der letzten.
Implementiere wiederhole: Gibt einen String zurück, der
aus n Kopien von s besteht, mit sep
(String) dazwischen. wiederhole("ho",3,"!") → ho!ho!ho
sep nur zwischen zwei Wiederholungen einfügen, also nicht nach der letzten.
Was gibt main aus?
💡 Call-by-Value
Java übergibt primitive Datentypen immer als Kopie. Änderungen im Parameter haben keinen Einfluss auf die ursprüngliche Variable.Bestimme für jede Phase den Wert der Variablen.
| Zeitpunkt | main: a | main: b | verdopple: x |
|---|---|---|---|
| Vor Aufruf | – | ||
| In verdopple (Start) | |||
| In verdopple (nach x*=2) | |||
| Nach Rückkehr | – |
x eine Kopie von a. Was ändert x *= 2 an a?Beschreibe, wie Java ein Array an eine Methode übergibt.
Wie kann man einen berechneten Wert aus einer Methode herausgeben?
Modifiziere verdopple so, dass der verdoppelte Wert
zurückgegeben wird und in main
korrekt aufgefangen wird.
a speichern.
Implementiere skalar: Gibt ein neues Array zurück,
bei dem jedes Element von a mit faktor
multipliziert wurde. Originale Array bleibt unverändert.
Welche Variante wird aufgerufen?
Aufruf: flaeche(4)
Aufruf: flaeche(3, 7)
Aufruf: flaeche(2.5)
Trage den Rückgabewert ein.
| Aufruf | Aufgerufene Variante | Rückgabewert |
|---|---|---|
| flaeche(5) | ||
| flaeche(4, 6) | ||
| flaeche(3.0) |
double.Woran erkennt Java, welche überladene Methode aufzurufen ist?
Darf man Methoden nur durch den Rückgabetyp überladen?
Ergänze eine vierte Überladung: flaeche(double basis, double hoehe)
für das allgemeine Dreieck: basis * hoehe / 2.
double-Werte.
Implementiere drei überladene Versionen von minimum:
für zwei int, drei int und zwei double.
a < b ? a : b (Ternary). Für drei: vergleiche
erst zwei, dann mit dritten.Aufruf: fak(4)
💡 Rekursion
Jeder rekursive Aufruf erzeugt einen neuen Stack-Frame. Der Basisfall stoppt die Rekursion.Ermittle den Call-Stack für fak(4).
| Aufruf | n | Rückgabe (berechnet) |
|---|---|---|
| fak(4) | 4 | |
| fak(3) | 3 | |
| fak(2) | 2 | |
| fak(1) | 1 | |
| fak(0) | 0 |
fak(0), dann jeder Aufruf mit dem Ergebnis des darunterliegenden.Beschreibe, was ohne Basisfall geschieht.
Wie viele Stack-Frames entstehen bei
fak(5)?
Schreibe fak als iterative Variante (ohne Rekursion).
Implementiere fib rekursiv: Fibonacci-Zahl an Position n.
fib(0)=0, fib(1)=1, fib(n)=fib(n-1)+fib(n-2).
fib(n) die Summe der beiden Vorgänger.Was gibt das Programm aus?
💡 Scope-Regeln
Lokale Variablen existieren nur in ihrem Block{ … }.
Klassenvariablen (static) sind in allen Methoden sichtbar.
Lokale Variablen verdecken gleichnamige Klassenvariablen.
Welche Variable ist an welcher Stelle sichtbar/aktiv?
| Ausgabe-Anweisung | Aktiver Wert von x | Grund |
|---|---|---|
| 1. print(x) in zeigeX() | ||
| 2. print(x) in aendereX() | ||
| 3. print(x) in zeigeX() danach |
x? Dann gilt sie – sonst die Klassenvariable.Wie kann man innerhalb von aendereX auf
die Klassenvariable x zugreifen (nicht die lokale)?
Wann wird eine lokale Variable aus dem Speicher entfernt?
Ändere aendereX so, dass keine neue lokale Variable angelegt,
sondern die Klassenvariable x auf 5 gesetzt wird
(kein Verdecken mehr). Die Ausgabe soll dann 10 5 5 lauten.
int x = … entsteht eine neue lokale Variable. Wie weist du stattdessen der Klassenvariable einen Wert zu?
Implementiere einen einfachen Zähler mit Klassenvariable:
erhoehe() erhöht den Zähler, reset() setzt ihn auf 0,
gibWert() gibt ihn zurück.
zaehler: erhöhen, auf 0 setzen, zurückgeben.new Hund().laut() aus?Welche Ausgabe erzeugt jeder Aufruf?
| Aufruf | Ausgabe |
|---|---|
new Tier().laut() |
|
new Hund().laut() |
|
new Hund().laut(3) |
laut()-Methode. laut(3) ist eine Überladung mit Schleife.Was ist der Unterschied zwischen Überschreiben (Override) und Überladen (Overload)?
Welche Java-Annotation zeigt eine bewusste Überschreibung an?
Ergänze eine Klasse Katze hinzu, die Tier erweitert und laut() so überschreibt, dass sie "Miau" ausgibt.
Tier (extends) und schreibt laut() mit gleicher Signatur neu.Implementiere eine statische Methode alleRufen(Tier[] tiere), die für jedes Tier-Objekt im Array laut() aufruft. Nutze Polymorphismus.
laut() aufrufen. Java wählt automatisch die passende Version.MathHelper.abs(-7) zurück?Berechne die Rückgabe jedes Aufrufs.
| Ausdruck | Ergebnis |
|---|---|
MathHelper.abs(-4) |
|
MathHelper.abs(3) |
|
MathHelper.max(MathHelper.abs(-4), MathHelper.abs(3)) |
|
MathHelper.kgZuPfund(1.0) (auf 1 Stelle) |
Warum werden Hilfsmethoden häufig als static deklariert?
Welche Einschränkung gilt für static-Methoden?
Ergänze die Klasse um eine statische Methode clamp(int wert, int min, int max), die wert auf den Bereich [min, max] begrenzt.
min, über max oder dazwischen? Gib jeweils den passenden Wert zurück.Schreibe eine statische Methode istPalindrom(String s), die true zurückgibt, wenn s vorwärts und rückwärts gleich lautet (Groß-/Kleinschreibung ignorieren). Für "Racecar" → true, für "Hallo" → false.
quersumme(493) zurück?Ermittle den rekursiven Abstieg und Aufstieg für quersumme(493).
| Aufruf | n | n % 10 | Rückgabe |
|---|---|---|---|
| quersumme(493) | 493 | 3 | |
| quersumme(49) | 49 | 9 | |
| quersumme(4) | 4 | – |
Wie viele Stack-Frames erzeugt quersumme(493)?
Was passiert, wenn der Basisfall if (n < 10) return n; fehlt?
Schreibe eine iterative Version von quersumme ohne Rekursion. Das Ergebnis soll identisch sein.
Schreibe eine rekursive Methode potenz(int basis, int exp), die basisexp berechnet. Basisfall: exp == 0 → 1. Für potenz(2, 10) soll 1024 zurückkommen.
exp == 0. Sonst gilt: basisexp = basis · basisexp−1.🏅 Deine Badges
📊 Statistik
↺ Zurücksetzen
Alle gespeicherten Daten werden gelöscht.
📄 Arbeitsblatt erstellen
Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.