Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.
start:info:11if:07_methoden 09.01.2009 07:59 | start:info:11if:07_methoden 23.10.2013 10:12 aktuell | ||
---|---|---|---|
Zeile 14: | Zeile 14: | ||
**Beispiel:** mehrfache Auswertung der Funktion | **Beispiel:** mehrfache Auswertung der Funktion | ||
- | <acm>f(x, n) = x^(2n) + n^2 - nx</acm> | + | <acm>f(x) = x^2 + 2x - 4</acm> |
===== Deklaration von Methoden ===== | ===== Deklaration von Methoden ===== | ||
Zeile 21: | Zeile 21: | ||
<code java> | <code java> | ||
- | public <Rückgabetyp> <Methodenname> ( <Parameterliste> ) { | + | <Berechtigung> <Rückgabetyp> <Methodenname> ( <Parameterliste> ) { |
<Anweisungen> | <Anweisungen> | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | **Berechtigung** | ||
+ | - ''public'' (default): Öffentlich, also auch für Objekte aus anderen Klassen zugänglich und ausführbar. | ||
+ | - ''private'': nicht öffentlich, nur Objekte dieser Klasse können die Methode ausführen. | ||
+ | - ''protected'': (später) | ||
+ | |||
**Rückgabetyp:**\\ | **Rückgabetyp:**\\ | ||
Das ist der Datentyp des Ergebnisses, das die Methode zurückliefern soll. | Das ist der Datentyp des Ergebnisses, das die Methode zurückliefern soll. | ||
- | Soll die Methode keinen Wert zurückliefern, verwenden wir hier ''void''. | + | Man kann hier alle (Daten-)Typen, die man kennt, wählen. Falls keine Rückgabe erwünscht ist wählt man ''void''. |
**Methodenname:**\\ | **Methodenname:**\\ | ||
Zeile 35: | Zeile 41: | ||
**Parameterliste:**\\ | **Parameterliste:**\\ | ||
- | Eine Kommaliste von Variablendeklarationen. | + | Eine Kommaliste von Variablendeklarationen (in runden Klammern). |
+ | Falls keine Parameter vorhanden sind, dann kommt nur "''()''". (runde Klammer auf und wieder zu) | ||
Die darin aufgeführten Variablen heißen //formale Parameter//. | Die darin aufgeführten Variablen heißen //formale Parameter//. | ||
+ | |||
+ | Anschließend kommt der "Rumpf" der Methode (also die eigentliche Implementierung mit ihren Anweisungen). | ||
===== Parameterübergabe und -rückgabe ===== | ===== Parameterübergabe und -rückgabe ===== | ||
- | Der **Methodenkopf** für die Berechnung von <acm>f(x, n) = x^(2n) + n^2 - nx</acm> könnte | + | Der **Methodenkopf** für die Berechnung von <acm>f(x) = x^2 + 2x - 4</acm> könnte |
lauten: | lauten: | ||
<code java> | <code java> | ||
- | public static double f(double x, int n) | + | public static double f(double x) |
</code> | </code> | ||
Zeile 65: | Zeile 74: | ||
<code java> | <code java> | ||
- | public static double f(double x, int n) { | + | public static double f(double x) { |
- | double produkt = 1.0; | + | double ergebnis = x*x + 2*x -4; |
- | for (int i=0; i<2*n ; i++) { | + | return ergebnis; |
- | produkt = produkt * x; | + | |
- | } | + | |
- | return produkt + n*n - n*x; | + | |
} | } | ||
</code> | </code> | ||
Zeile 78: | Zeile 84: | ||
Wie eine Methode aus BlueJ aufgerufen wird wissen wir bereits. Wie aber wird nun eine Methode aus dem Programm heraus aufgerufen? Recht simpel: | Wie eine Methode aus BlueJ aufgerufen wird wissen wir bereits. Wie aber wird nun eine Methode aus dem Programm heraus aufgerufen? Recht simpel: | ||
- | **Syntax:** | + | ^ ^ Methode ohne Rückgabe ^ Methode mit Rückgabetyp ^ |
- | + | ^ **Syntax:**| <code java> | |
- | <code java> | + | |
Methodenname( Parameterliste ); | Methodenname( Parameterliste ); | ||
- | </code> | + | </code> | <code java> |
+ | rueckgabe = Methodenname( Parameterliste ); | ||
+ | </code>| | ||
+ | ^ Beispiele | <code java> | ||
+ | public void sachTach(String name) { | ||
+ | System.out.println("Tach " + name); | ||
+ | } | ||
+ | </code> wird wie folgt aufgerufen: <code java> | ||
+ | sachTach("Peter"); | ||
+ | </code>| <code java> | ||
+ | public int laenge(String name) { | ||
+ | return name.length(); | ||
+ | } | ||
+ | </code> wird wie folgt aufgerufen (Bsp.): <code java> | ||
+ | int i = laenge("Peter"); //also i = 5 | ||
+ | </code> | | ||
+ | |||
+ | ''i'' muss hier den selben Typ wie den Rückgabetypen der Methode haben, also ''int''. | ||
- | Dabei sollte man Folgendes im Hinterkopf behalten: | + | Folgendes sollte man auch noch im Hinterkopf behalten: |
* Ein Methodenaufruf ist ein elementarer Ausdruck (wie ein Zuweisung, Variablendeklaration, Ausgabe...). | * Ein Methodenaufruf ist ein elementarer Ausdruck (wie ein Zuweisung, Variablendeklaration, Ausgabe...). | ||
Zeile 101: | Zeile 123: | ||
return x; | return x; | ||
} else { | } else { | ||
- | return x; | + | return y; |
} | } | ||
} | } | ||
- | public double max(double x, double y) f | + | public double max(double x, double y) { |
if (x>y) { | if (x>y) { | ||
return x; | return x; | ||
} else { | } else { | ||
- | return x; | + | return y; |
} | } | ||
} | } | ||
Zeile 116: | Zeile 138: | ||
Dabe unterscheidet Java Methoden gleichen Namens... | Dabe unterscheidet Java Methoden gleichen Namens... | ||
- | * anhand der Zahl der Parameter, | + | * anhand der **Zahl der Parameter**, |
- | * anhand des Typs Typs der Parameter und | + | * anhand des **Typs der Parameter** und |
- | * anhand der Position der Parameter. | + | * anhand der **Position der Parameter**. |
Der Methodenkopf wird in diesem Zusammenhang auch **Signatur**((Unterschrift, also eine Art Erkennungsmerkmal)) genannt. | Der Methodenkopf wird in diesem Zusammenhang auch **Signatur**((Unterschrift, also eine Art Erkennungsmerkmal)) genannt. | ||
Zeile 124: | Zeile 146: | ||
===== Rekursive Methoden ===== | ===== Rekursive Methoden ===== | ||
- | Man darf in Methoden andere Methoden, aber auch sich selbst (also die eigene Methode) aufrufen. Dies nennt man **Rekursion**. Rekursion ist in Java erlaubt, d.h. Methoden dürfen sich selbst aufrufen! | + | Man darf in Methoden andere Methoden, aber auch sich selbst (also die eigene Methode) aufrufen. Diese letztgenannte Art nennt man **Rekursion**. Rekursion ist in Java erlaubt, d.h. Methoden dürfen sich selbst aufrufen! |
**Beispiel: Methode zur Berechnung der Fibonacci-Zahlen Fi:** | **Beispiel: Methode zur Berechnung der Fibonacci-Zahlen Fi:** | ||
Zeile 150: | Zeile 172: | ||
</code> | </code> | ||
+ | ====== Aufgaben ====== | ||
+ | |||
+ | ^ ^ mit Rückgabe ^ ohne Rückgabe ^ | ||
+ | ^mit Parameter | | | | ||
+ | ^ohne Parameter | | | | ||
+ | - Erstelle die obige Tabelle in denen du je ein Beispiel zu den 4 möglichen Methodenköpfen (Signaturen) angibst. | ||
+ | - Was berechnet/macht die Methode ''max(int x, int y)''? | ||
+ | - Programmiere eine Methode ''min(int x, int y)''. | ||
+ | - Erstelle eine Klasse die den Benutzer nach drei Variablen a, b und c fragt und anschließend eine Methode ''quadFkt(double a, double b, double c)'' aufruft, die dann den Funktionswert von <acm>f(x) = ax^2 + bx + c</acm> berechnet. | ||
+ | - Programmiere eine Methode ''tausche(int x, int y)'', die den Inhalt zweier Variablen vertauscht. |