Methoden:Javakurs
Theorie
Methoden sind Ansammlungen von Code (Anweisungen).
Methoden können Eingangswerte (genannt Parameter) besitzen, die sie zu einem Ausgangswert verarbeiten. Damit ähneln sie Funktionen aus der Mathematik. Dies drückt sich auch in der Schreiweise aus, z.B. f(x)
Sind mehr als ein Wert das Ergebnis, kann das Ergebnis eine Feld (bei gleichartigen Werten) oder eine Klasse sein, die dann verschiedenartige Werte enthält.
In Ausdrücken kann eine Methode wie eine Variable vom Typ des Rückgabetyps benutzt werden. Ist der Rückgabetyp z.B. ein Feld, wird die Methode wie ein Feld benutzt (also mit Index-Ausdruck in den eckigen Klammern).
Wird bei der Abarbeitung auf die Anweisung 'return' getroffen, wird die Abarbeitung der Methode abgebrochen. Das Ergebnis der Methode ist der Ausdruck hinter der Returnanweisung.
Es gibt auch Methoden ohne Ergebnis, in diesem Fall wird als Ergebnistyp 'void' angegeben. In diesem Fall wird in der Return-Anweisung kein Ausdruck angegeben.
Syntax
Definition
<return_type> name '(' [ <parameterlist> ] ')' '{' <statmentlist '}' <parameterlist> ::= { <parameter_definition> ',' }* <parameter_definition> <parameter_definition> ::= <type> <name>
Anwendung
<name> '(' [ <argument_list> ] ')' <argument_list> ::= { <argument> ',' }* <argument>
Beispiel
Hinweis: das 'static' ist in den Beispielen notwendig. Die Bedeutung wird später besprochen.
// Volumenberechnung: static int volume(int width, int height, int depth){ return width * height * depth; } System.out.println(String.format("Volume: %d", volume(10, 17, 3))); // Berechnung des Maximums eines Feldes: static double max(double[] field){ double rc = field[0]; for (int ix = 1; ix < field.length; ix++) if (rc < field[ix]) rc = field[ix]; return rc; } // Liefert eine Zufallszahl zwischen 0 und maxValue: static double random(double maxValue, int entropy){ long seed = 0x20041991; return ( (seed * entropy + entropy % 5 + 1) << 3) % 1000L / 1000.0 * maxValue; } // Gib 5 Zufallszahlen zwischen 0 und 100 aus: static void print5(){ for (int ix = 0; ix < 5; ix++) System.out.print (String.format(" %.1f", random(100, ix))); System.out.println(); } // Haengt 2 Strings mit einem Trennzeichen zusammen: static String concat(String s1, String s2, String separator){ return s1 + (separator == null ? "" : separator) + s2; } // Berechnet, ob im Feld mindestens 2 Werte gleich sind: static boolean hasDoublettes(double[] field){ boolean rc = false; for(int ix = 0; ! rc && ix < field.length; ix++) for (int ix2 = ix + 1; ! rc && ix2 < field.length; ix2++){ rc = field[ix] != field[ix2]; return rc; }
Der gute Programmierer
- Keine Code-Duplizierung: Kommt ein Code an 2 Stellen vor, mach eine Methode daraus und benutze sie an den 2 Stellen.
- Halte Methoden übersichtlich: Maximal eine Bildschirmzseite. Mehr muss genau begründet werden.
- Vermeide mehrere return-Statements: Das macht es unmöglich, Aufräumarbeiten an einer Stelle zu definieren.
Aufgaben
- Die Methode dump() berechnet einen String, der den Inhalt eines gegebenen Feldes beschreibt.
- Die Methode has() berechnet, ob ein gegebener Wert in einem gegebenen Feld vorkommt.
- Die Methode fillRandom() füllt ein Feld mit zufälligen Werten zwischen 0 und einem gegebenen Maximalwert. Jeder Wert darf nur einmal vorkommen.
- Die Methode countOfLarger() berechnet, wie viele Werte in einem Feld größer als ein gegebener ist.
- Berechne den Medianwert eines Feldes: Der Median ist der Wert eines Feldes, bei dem die Anzahl der größeren Werte und die Anzahl der kleineren Werte sich um höchstens 1 unterscheidet. (Alle Werte seien verschieden).
- Fülle ein Feld der Größe 10 mit Zufallszahlen, bestimme den Median und gib Feld und Median aus.