Beruflich Dokumente
Kultur Dokumente
Beispiel
public class Test
{
private static int sCounter = 0;
public static double f(double x, int n)
{
sCounter++;
double tmp = Math.pow(x,n);
return tmp;
}
}
Methoden
formale Parameter (Platzhalter)
tatsächliche Parameter
Wert parameter
double tmp;
tmp = a + b; Rückgabe
usw..
parameter
Wert
Parameterübergabe
lokale Variablen existieren nur
während der Methodenausführung
Aufrufe
Methode f Methode g
{ {
f() g()
} }
Beispiel
public class Test
{
Parameter
public static long fakultaet(int n)
{
long result = 1; Lokale Variablen
for (int i = 2; i <= n; ++i) result *= i;
return result;
}
}
Beispiel
Um einen int-Wert einzulesen schreibt man oft etwa
Beispiel
Falsche Implementierung zum Tauschen zweier int-Werten
public static void swap(int a, int b)
{
var temp = a;
a = b;
b = temp;
}
Man muss also ggf. mit einer Kopie oder mit einem Vermittler arbeiten.
Rückgabewert
Es kann nur ein Wert bzw. ein Objekt mit der return-Anweisung
zurückgegeben werden. Um mehrere Objekte/Werte zurückzugeben, benutzt
man das Konzept der Parameter als Behälter.
Methode ohne Rückgabe muss void als Rückgabetyp deklarieren.
Beispiel
public static void printUsage()
{
out.println("Usage: java CTest Name");
}
public static int squareRoot(int i)
{
return (int) (Math.sqrt(i));
}
➔ Woher sollen die anderen Programmierer wissen, dass -1 illegal ist. -1 ist auch
ein int-Wert wie alle anderen!
3) Ausnahmen werfen
public static int squareRoot(int i)
{
if (i < 0)
{
throw new IllegalArgumentException("wrong param " + i);
}
return (int) (Math.sqrt(i));
}
Design by contract.
Syntax:
assert Bedingung [: Meldung]
Beim Ausführen muss man assert aktivieren (enable assert) : java -ea
2) Unerreichbare Codes
public static int f(int i) {
if (i < 0) {
throw new IllegalArgumentException("wrong param " + i);
return 0; // Fehler !!!! unerreichbar
}
return 1;
}
- Mehrere static -Blöcke sind möglich (wird von Compiler zu einem großen
zusammengefasst).
- Reihenfolgen der Blöcke sind relevant.
Tran / Hettel GDI 2 24
Klassenvariablen und -objekte
Eine Methode, die sich selbst (direkt oder indirekt) aufruft, ist rekursiv.
Die Natur der Rekursion
Charakteristiken:
Ein oder mehrere einfache Fälle existieren, für die eine (nicht rekursive) Lösung
bekannt ist.
Das Problem lässt sich lösen, wenn ein "kleineres" (reduziertes) Problem gelöst
wurde.
Häufige Struktur
if (Spezialfälle eingetreten)
Löse das Problem
else
Löse reduzierte Probleme und verwende die Ergebnisse, um
das Problem zu lösen
Beispiel: Fakultät.
Aus der Mathematik:
Beispiel: Fibonacci-Zahlen.
Aus der Mathematik:
public static void move(int n, int from, int to, int help)
{
if (n == 1)
{
System.out.println("move from " + from + " to " + to);
}
else
{
move(n-1, from , help, to);
System.out.println("move from " + from + " to " + to);
move(n-1, help, to, from);
}
}