Beruflich Dokumente
Kultur Dokumente
Methoden
© Prof. Dr. Steffen Heinzl
Methoden
© Prof. Dr. Steffen Heinzl
public static void main(String[] args)
{
Wenn wir mehrere Berechnungen in
System.out.println("Was wollen Sie tun?"); einem Programm unterbringen
System.out.println("1: PI‐Berechnung"); wollen, kann es schnell
System.out.println("2: Quadratwurzelberechnung");
System.out.println("3: Betrag"); unübersichtlich werden.
//...
Scanner scanner = new Scanner(System.in);
int auswahl = scanner.nextInt();
if (auswahl == 1)
{ Wir benötigen eine bessere
//PI‐Berechnung
//verwendet Quadratwurzelberechnung Unterteilung in einzelne
} Programmteile!
else if (auswahl == 2)
{
//Quadratwurzelberechnung
}
else if (auswahl == 3)
{
//Betrag Dies geschieht durch sog.
}
//... „Methoden“.
} © Prof. Dr. Steffen Heinzl
Methoden
Eine Methode ähnelt einer mathematischen Funktion, sie nimmt ein (od. mehrere)
Argument(e) entgegen und hat einen Rückgabewert.
Input: x0, Resultat: y
Eine Methode kann also als eine Art Unterprogramm verwendet werden, die eine
(od. mehrere) Eingaben verarbeitet und einen Wert zurückgibt.
Durch solche Unterprogramme können Teilprobleme, die immer wieder gelöst
werden müssen, gekapselt werden, z.B.:
Berechnung des verzinsten Kapitals nach n Jahren
Berechnung des Kosinus
Erkennung des Vorzeichens
Hinzufügen von Daten in eine Tabelle
Download einer Webseite
Generierung eines Ebooks
© Prof. Dr. Steffen Heinzl
…
Welche Methoden kennen
wir eigentlich schon?
Methoden Rückgabewert Parameter
System.out.println void String oder int oder double, etc.
Math.pow double double, double
string.charAt char int
scanner.nextInt int ‐
…
© Prof. Dr. Steffen Heinzl
Methoden – Beispiel
Eine Methode, die eine Addition zweier Ganzzahlen durchführt, könnte
folgendermaßen aussehen:
andere Parameter
Rückgabetyp (durch Kommata getrennt)
Klassen u.
Objekte die Methode Methodenname
können auf wird der Klasse
die Methode zugeordnet
zugreifen
Signatur: Methodenname
public static int add(int a, int b)
und Parameterliste
{
int result = a + b; Methodenrumpf
return result; (Anweisungen innerhalb
} der Methode)
Rückgabewert
Durch return wird (vom Rückgabetyp)
© Prof. Dr. Steffen Heinzl
die Methode verlassen
public static int add(int a, int b)
{
int result = a + b;
return result;
}
Wie kann ich die Methode
aufrufen?
Durch Schreiben von
<Methodenname>(<Argument1>, <Argument2>, …)
Beispiel:
© Prof. Dr. Steffen Heinzl
Methoden ‐ return
Mit return kann eine Methode auch vorzeitig verlassen
werden.
Beispiel: Eine Methode, die das Vorzeichen einer Zahl bestimmt:
© Prof. Dr. Steffen Heinzl
Methodenaufruf – Beispiel
public class MethodenBeispiel
{
public static int sign(double x)
{
if (x < 0) return ‐1;
else if (x > 0) return +1;
else return 0;
}
public static void main(String[] args)
{
//Betrag berechnen
int zahl = ‐5;
zahl = zahl * sign(zahl);
System.out.println(zahl);
}
© Prof. Dr. Steffen Heinzl
}
Methodenaufruf – Beispiel
public class MethodenBeispiel
{
public static int sign(double x)
{
if (x < 0) return ‐1;
else if (x > 0) return +1;
else return 0;
}
public static void main(String[] args)
{
wird zu ‐5 ausgewertet
//Betrag berechnen
wird zu ‐1 ausgewertet
int zahl = ‐5;
zahl = zahl * sign(zahl);
System.out.println(zahl);
} ‐5 * ‐1, also 5 wird in zahl geschrieben
© Prof. Dr. Steffen Heinzl
}
Methode ‐ Rückgabetypen
Als Rückgabetyp kommen jegliche Datentypen in Frage.
void‐Rückgabetyp bedeutet,
dass die Methode keinen Wert zurückgibt.
public static void printMenue()
{
System.out.println("***********************");
System.out.println("* 1: Werte einlesen *");
System.out.println("* 2: Formel berechnen *");
System.out.println("***********************");
return;
}
... Die Methode kann mit einem
//Aufruf: return (auch vorzeitig) verlassen werden
printMenue();
© Prof. Dr. Steffen Heinzl
Methodennamen
Methodennamen beginnen wie Variablennamen mit einem Kleinbuchstaben und
verwenden Camel Case.
Methoden werden häufig nach Tätigkeiten benannt:
gibMenueAus, erstelleDokument, …
Ausnahme sind bspw. mathematische Methoden: Hier wird der bereits bekannte
Name aus der Mathematik genommen.
sin, cos, …
© Prof. Dr. Steffen Heinzl
Warum ist der Einsatz von
Methoden sinnvoll?
z. B. Wiederverwendung von Code
Wir haben bspw. für mehrere Aufgaben
bereits Potenzrechnung verwendet.
Aber: Wie schreibt man eine Methode, die
die Potenz berechnet?
© Prof. Dr. Steffen Heinzl
Erste Überlegung:
Welchen Namen hat die Methode
und welches Ergebnis?
Der Name sollte das kurz bezeichnen, was
die Methode macht, z. B. potenz
Das Ergebnis der Potenz ist eine Zahl.
Die Methode gibt also eine Zahl zurück.
public static int potenz()
© Prof. Dr. Steffen Heinzl
Zweite Überlegung:
Welche Argumente verarbeitet die Methode?
(Was gebe ich in die Methode hinein?)
Zur Berechnung der Potenz wird Basis und
Exponent benötigt.
Die Methode hat zwei Parameter.
} © Prof. Dr. Steffen Heinzl
Dritte Überlegung:
Wie berechne ich die Potenz?
· · …·
n‐mal
Schleife
© Prof. Dr. Steffen Heinzl
Wie berechne ich die Potenz?
int x = 3;
int n = 4;
int ergebnis = 1; //neutrales Element der Multiplikation
© Prof. Dr. Steffen Heinzl
Zusammenführung von Methodenkopf und
Implementierung
public static int potenz(int basis, int exponent)
{
int x = 3;
int n = 4;
int ergebnis = 1; //neutrales Element der Multiplikation
© Prof. Dr. Steffen Heinzl
Zusammenführung von Methodenkopf und
Implementierung
public static int potenz(int basis, int exponent)
{
int x = 3;
int n = 4;
int ergebnis = 1; //neutrales Element der Multiplikation
© Prof. Dr. Steffen Heinzl
Zusammenführung von Methodenkopf und
Implementierung
public static int potenz(int basis, int exponent)
{
© Prof. Dr. Steffen Heinzl
Zusammenführung von Methodenkopf und
Implementierung
public static int potenz(int basis, int exponent)
{
© Prof. Dr. Steffen Heinzl
Zusammenführung von Methodenkopf und
Implementierung
public static int potenz(int basis, int exponent)
{
© Prof. Dr. Steffen Heinzl
Zusammenführung von Methodenkopf und
Implementierung
public static int potenz(int basis, int exponent)
{
© Prof. Dr. Steffen Heinzl
Wie teste ich die Methode?
public class PotenzBeispiel
{
public static int potenz(int basis, int exponent)
{
int ergebnis = 1; //neutrales Element der Multiplikation
for (int i = 1; i <= exponent; i++)
{
ergebnis = ergebnis * basis;
}
return ergebnis;
}
Wird ein Wert verwendet, den man variabel
machen könnte?
Können Datentypen ausgeweitet werden?
© Prof. Dr. Steffen Heinzl
Kann die Methode noch sinnvoll
verallgemeinert werden?
public static int potenz(int basis, int exponent)
{
int ergebnis = 1; //neutrales Element der Multiplikation
for (int i = 1; i <= exponent; i++)
{
ergebnis = ergebnis * basis;
}
return ergebnis;
} Ausweitung von Datentypen
A:
{ Hinter ergebnis verbirgt sich in den
int ergebnis = 1;
Methoden main und potenz jeweils der
gleiche Speicherplatz.
for (int i = 1; i <= exponent; i++)
{
Es wurde vergessen, ergebnis aus der
B:
ergebnis = ergebnis * basis;
} main‐Methode an die Methode potenz
return ergebnis; zu übergeben.
}
Der Compiler wirft einen Fehler, weil der
public static void main(String[] args)
{
int ergebnis = potenz(3, 4);
C: Name ergebnis in zwei unterschiedlichen
Methoden verwendet wurde.
System.out.println(ergebnis);
Hinter ergebnis verbirgt sich in den
}
}
D: Methoden main und potenz jeweils ein
unterschiedlicher Speicherplatz.
© Prof. Dr. Steffen Heinzl
Nochmal Sichtbarkeit von Variablen
public class PotenzBeispiel
{
public static int potenz(int basis, int exponent)
{
int ergebnis = 1; //neutrales Element der Multiplikation
for (int i = 1; i <= exponent; i++)
{
ergebnis = ergebnis * basis;
}
return ergebnis; ergebnis ist sichtbar
}
Zwei unterschiedliche
public static void main(String[] args) Variablen (u. Speicherplätze)
{
trotz gleichen Namens
int ergebnis = potenz(3, 4);
System.out.println(ergebnis); ergebnis ist sichtbar
}
© Prof. Dr. Steffen Heinzl
}
Methodenbeispiel ‐ Betrag
public class MethodenBeispiel
{
public static double absoluteValue(double x)
{
if (x < 0) return ‐x;
else return x;
}
public static void main(String[] args)
{
System.out.println(absoluteValue(‐5));
System.out.println(absoluteValue(5));
System.out.println(absoluteValue(0));
}
}
© Prof. Dr. Steffen Heinzl
public class MethodenBeispiel2
{
Methode verwendet Methode
public static double absoluteValue(double x)
{
return x*sign(x);
} Methode absoluteValue
public static int sign(double zahl) verwendet Methode sign zur
{
if (zahl < 0) return ‐1;
Bestimmung des Betrags
else if (zahl > 0) return +1;
else return 0;
}
public static void main(String[] args)
{
System.out.println(absoluteValue(‐5));
}
}
© Prof. Dr. Steffen Heinzl
Einfache 2D‐Grafik
© Prof. Dr. Steffen Heinzl
Zum Ausprobieren: Graphik
Java kann mehr als nur die Kommandozeile:
import java.applet.Applet;
import java.awt.*;
public class Haus extends Applet {
public void paint (Graphics g) {
Graphics2D g2D = (Graphics2D) g;
//Haus
g2D.setColor(Color.DARK_GRAY);
g2D.setStroke(new BasicStroke(5)); //Pinselbreite 5
g2D.drawRect(150, 150, 100, 100);
//Dach
g2D.setColor(Color.RED);
g2D.drawLine(149, 150, 200, 75);
g2D.drawLine(251, 150, 200, 75);
g2D.drawLine(154, 146, 247, 146);
//Tür
g2D.setColor(Color.BLACK);
g2D.drawRect(210, 225, 15, 25);
}
}
© Prof. Dr. Steffen Heinzl
Zum Ausprobieren: Graphik
Java kann mehr als nur Programme auf der Kommandozeile:
import java.applet.Applet;
import java.awt.*;
public class Haus extends Applet {
public void paint (Graphics g) {
Graphics2D g2D = (Graphics2D) g;
//Haus
g2D.setColor(Color.DARK_GRAY);
g2D.setStroke(new BasicStroke(5)); //Pinselbreite 5
g2D.drawRect(150, 150, 100, 100);
//Dach
g2D.setColor(Color.RED);
g2D.drawLine(149, 150, 200, 75);
g2D.drawLine(251, 150, 200, 75);
g2D.drawLine(154, 146, 247, 146);
//Tür
g2D.setColor(Color.BLACK);
g2D.drawRect(210, 225, 15, 25); Wie ergänzt man das Haus
}
}
um ein Fenster?
© Prof. Dr. Steffen Heinzl
Rekursion
© Prof. Dr. Steffen Heinzl
Aufgaben: Potenz, Fakultät
© Prof. Dr. Steffen Heinzl
Rekursive Methodenaufrufe
Unter Rekursion versteht man, dass eine Methode sich selbst erneut aufruft.
Dabei wird in der Regel ein veränderter Parameter übergeben.
Die Aufrufe erfolgen solange bis eine bestimmte Abbruchbedingung erfüllt ist.
Rekursionen kann man anstelle von Schleifen verwenden.
© Prof. Dr. Steffen Heinzl
Fakultät – Induktive Definition
Induktive (rekursive) Definition der Fakultät:
Definition: Beispiel:
Für ∈ gilt: 5! 5 · 4!
0! ≔ 1 5 · 4 · 3!
1 !≔ 1 · ! 5 · 4 · 3 · 2!
5 · 4 · 3 · 2 · 1!
5 · 4 · 3 · 2 · 1 · 0!
5·4·3·2·1·1
weitere Beispiele:
n! · 1 · 2 … · 3 · 2 · 1 · 0!
© Prof. Dr. Steffen Heinzl
Fakultät – Rekursive Berechnung
Die Fakultät kann in einer rekursiven Methode berechnet werden:
Wenn n gleich 0 ist,
public static long fak(int n) wird die Methode verlassen
und die Rekursion beendet.
{
if (n==0) return 1; 0! ≔ 1
return n * fak(n‐1); 1 !≔ 1 · !
}
© Prof. Dr. Steffen Heinzl
Summe – rekursive Berechnung
Analog zur Fakultät lässt sich auch die Summe in einer rekursiven Methode berechnen.
Mathematisch:
, n>0
Als Methode:
public static int sum(int n)
{ Wird die Summe von der
if (n == 0) return 0; Zahl 0 gebildet, wird 0
return n + sum(n‐1); zurückgegeben.
}
© Prof. Dr. Steffen Heinzl
Rekursive Aufrufe – Beispiel
public static int sum(int n)
{
if (n == 0) return 0;
return n + sum(n‐1);
}
public static void main(String[] args)
{
System.out.println(sum(3));
} © Prof. Dr. Steffen Heinzl
Rekursive Aufrufe – Beispiel
public static int sum(int n)
{
if (3 == 0) return 0;
return 3 + sum(3‐1);
}
2 public static int sum(int n)
{
if (2 == 0) return 0;
return 2 + sum(2‐1);
}
public static int sum(int n) 1 public static int sum(int n)
{ {
if (0 == 0) return 0; if (1 == 0) return 0;
return 0 + sum(0‐1); return 1 + sum(1‐1);
} public static void main(String[] args) }
0
{
System.out.println(sum(3));
} © Prof. Dr. Steffen Heinzl
Rekursive Aufrufe – Beispiel (ctd.)
public static int sum(int n)
{
if (3 == 0) return 0;
return 3 + sum(3‐1);
}
6public static int sum(int n)
{
if (2 == 0) return 0;
return 2 + sum(2‐1);
}
public static int sum(int n) 3 public static int sum(int n)
{ {
if (0 == 0) return 0; if (1 == 0) return 0;
return 0 + sum(0‐1); return 1 + sum(1‐1);
} }
public static void main(String[] args) 1 0
{
System.out.println(sum(3));
© Prof. Dr. Steffen Heinzl
© Prof. Dr. Steffen Heinzl
}
Rekursive Aufrufe – Beispiel (alternativ)
public static int sum(int n)
{
if (n == 0) return 0;
return n + sum(n‐1);
}
n == 0 ist falsch, daher return 3 + sum(2). Damit die Rückgabe erfolgen
kann, muss zunächst sum(2) evaluiert werden.
n == 0 ist falsch, da n = 2. Daher return 2 + sum(1). Damit die Rückgabe
erfolgen kann, muss zunächst sum(1) evaluiert werden.
n == 0 ist falsch, da n = 1. Daher return 1 + sum(0). Damit die Rückgabe
erfolgen kann, muss zunächst sum(0) evaluiert werden.
n == 0 ist wahr, daher return 0;
Nun werden die Ausdrücke wieder rückwärts zusammengesetzt:
sum(0) = 0
sum(1) = 1 + sum(0) = 1
sum(2) = 2 + sum(1) = 2 + 1 = 3
© Prof. Dr. Steffen Heinzl
sum(3) = 3 + sum(2) = 3 + 3 = 6
public static int sum(int m, int n)
{
Welche Lösung ist die richtige, um
A: }
if (n==m) return m;
else return sum(m,n‐1);
folgende induktive Definition mit einer
rekursiven Methode in Java abzubilden? public static int sum(int m, int n)
{
B: }
if (n==m) return m;
else return n + sum(n‐1);
: ,
C: }
if (n==m) return m;
else return n + sum(m,n‐1);
D: }
if (n==0) return m;
else return n + sum(m,n‐1);
© Prof. Dr. Steffen Heinzl
Potenz – Induktive Definition
Induktive (rekursive) Definition der Potenz:
Definition: Beispiele:
Für ∈ , ∈ gilt: 3 1
≔1 0 1
≔ · 5 5 ·5
5 · 5 · 5
5 · 5 · 5 · 5
5 · 5 · 5 · 5 · 5
1 · 5 · 5 · 5 · 5 625
Wie kann die Potenz in einer
rekursiven Methode
berechnet werden?
Zur Übung!
© Prof. Dr. Steffen Heinzl
Cosinus‐Berechnung
als Beispiel zur Berechnung
mathematischer Funktionen
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
Der Cosinus lässt sich durch folgende Reihe berechnen:
: → 1,1
≔ 1
2 !
Wie sehen die ersten fünf Glieder aus?
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
Die ersten 5 Reihenglieder sehen wie folgt aus:
cos 1 ∓⋯
2! 4! 6! 8!
Wie kann ein Algorithmus (eine Rechenvorschrift) aussehen,
die den Cosinus berechnet?
Wir schauen zunächst, wie sich Zähler und Nenner in jedem
Schritt verändern.
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
Wir belegen den
ersten Summanden vor!
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
for (int i = 2; ; )
Wir belegen den {
ersten Summanden vor!
Starten die Schleife
beim 2. Summanden
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
for (int i = 2; ; )
{
Der Zähler berechnet
zaehler = zaehler * x * x * (‐1);
sich, indem man den
alten Zähler mit x2
multipliziert (und das
Vorzeichen ändert).
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
for (int i = 2; ; )
{
Der Nenner berechnet
zaehler = zaehler * x * x * (‐1);
sich, indem man den nenner = nenner * i * (i‐1);
alten Nenner mit dem
Laufindex i und i‐1
multipliziert.
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
double summand;
for (int i = 2; ; )
{
Aufaddieren!
zaehler = zaehler * x * x * (‐1);
nenner = nenner * i * (i‐1);
summand = zaehler/nenner;
summe = summe + summand;
}
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
double summand;
i=i+2
for (int i = 2; ; )
{
Um wie viel muss i
zaehler = zaehler * x * x * (‐1);
erhöht werden? nenner = nenner * i * (i‐1);
summand = zaehler/nenner;
summe = summe + summand;
}
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
double summand;
for (int i = 2; ;i=i+2)
{
Wie wählen wir die
zaehler = zaehler * x * x * (‐1);
Laufbedingung? nenner = nenner * i * (i‐1);
summand = zaehler/nenner;
summe = summe + summand;
}
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
double summand = 1;
for (int i = 2; summand > 1E‐15 ||
summand < ‐1E‐15; i=i+2)
Wie wählen wir die
{
Laufbedingung? zaehler = zaehler * x * x * (‐1);
nenner = nenner * i * (i‐1);
summand = zaehler/nenner;
summe = summe + summand;
}
© Prof. Dr. Steffen Heinzl
Methode zur Berechnung des Cosinus
public static double cos(double x)
{
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
double summand = 1;
for (int i = 2; summand > 1E‐15 ||
summand < ‐1E‐15; i=i+2)
Rückgabewert ergänzen!
{
zaehler = zaehler * x * x * (‐1);
nenner = nenner * i * (i‐1);
summand = zaehler/nenner;
summe = summe + summand;
}
return summe;
}
© Prof. Dr. Steffen Heinzl
Methodendokumentation
/**
* Berechnet den Kosinus von der übergebenen Zahl x.
* @param x reelle Zahl (in RAD), von der der Kosinus berechnet werden soll.
* @return Ergebnis des Kosinus; reelle Zahl zwischen ‐1 und 1 (beide inklusive)
*/
public static double cos(double x) Wenn andere die Methode
{ verwenden sollen, sollten
double zaehler = 1.0;
double nenner = 1.0; wir sie entsprechend
double summe = 1.0; dokumentieren!
double summand = 1;
for (int i = 2; summand > 1E‐15 || summand < ‐1E‐15; i = i + 2)
{
zaehler = zaehler * x * x * (‐1);
nenner = nenner * i * (i ‐ 1);
summand = zaehler / nenner;
summe = summe + summand;
}
return summe;
} © Prof. Dr. Steffen Heinzl
Anderen Methoden zur Verfügung stellen
package de.fhws;
public class MyMath {
/**
* Berechnet den Kosinus von der übergebenen Zahl x.
* @param x reelle Zahl (in RAD), von der der Kosinus berechnet werden soll.
* @return Ergebnis des Kosinus; reelle Zahl zwischen ‐1 und 1 (beide inklusive)
*/
public static double cos(double x) {
double zaehler = 1.0;
double nenner = 1.0;
double summe = 1.0;
double summand = 1;
for (int i = 2; summand > 1E‐15 || summand < ‐1E‐15; i = i + 2) {
zaehler = zaehler * x * x * (‐1);
nenner = nenner * i * (i ‐ 1);
summand = zaehler / nenner;
summe = summe + summand;
}
return summe;
} © Prof. Dr. Steffen Heinzl
}
Methoden einbinden
Um die Methode aufrufen zu können,
muss die Klasse MyMath auf dem
Klassenpfad liegen.
© Prof. Dr. Steffen Heinzl
Mathematische Funktionen
Die Klasse java.lang.Math stellt eine Menge an geläufigen mathematischen
Konstanten und Funktionen zur Verfügung:
Mathematische Funktion oder Konstante Methode oder Konstante in Java
double Math.E
double Math.PI
double Math.abs(double x)
cos double Math.cos(double x)
sin double Math.sin(double x)
double Math.sqrt(double x)
double Math.pow(double x, double y)
gibt Zufallszahl x mit ∈ 0,1 zurück double Math.random()
© Prof. Dr. Steffen Heinzl
Finch
Methoden von anderen benutzen
© Prof. Dr. Steffen Heinzl
Finch
source: http://www.finchrobot.com/sites/default/files/BirdBrain1010‐0005.jpg
Lichtsensor
Temperatursensor
Sensor für Hindernisse
Beschleunigungsmesser
Motoren
Buzzer
RGB “Schnabel”‐LED
Stiftbefestigung (zum Malen)
Strom über USB Kabel
source: http://www.finchrobot.com/sites/default/files/finchie.jpg
© Prof. Dr. Steffen Heinzl
Finch einrichten
von http://www.finchrobot.com/downloads Eclipse package herunterladen!
FinchJava.zip entpacken
Ordner FinchSoftware muss nachher zu sehen sein.
In Eclipse:
Neues Projekt anlegen
Finch Software\SourceFiles\Code nach src kopieren
Finch Software\javadoc in das Projekthauptverzeichnis kopieren
civil.dll, finch.jar kopieren in das Projekthauptverzeichnis
finch.jar dem Klassenpfad hinzufügen (Rechtsklick auf finch.jar ‐> Build Path ‐>
Add to Build Path
© Prof. Dr. Steffen Heinzl
Javadoc einrichten
Um die Hilfe zu den Methoden zu sehen,
muss das JavaDoc eingerichtet werden.
© Prof. Dr. Steffen Heinzl
Javadoc einrichten
Rechte Taste auf finch.jar ‐> Properties
Unter JavaDoc URL folgendes eintragen:
file:/<absoluter Pfad zum Eclipse Workspace>/Finch2/javadoc/
z.B.
file:/C:/W/WorkspaceProgrammierenI/Finch2/javadoc/
© Prof. Dr. Steffen Heinzl
Finch testen
Finch per USB an den Rechner anschließen
Dance.java in Eclipse starten
© Prof. Dr. Steffen Heinzl
Switch‐Statement
© Prof. Dr. Steffen Heinzl
switch‐Statement
Ein switch‐Statement ist eine Kontrollstruktur, die i.d.R. alternativ
zu einer if‐Anweisung mit mehreren else‐ifs eingesetzt wird.
Das switch‐Anweisung nimmt
eine ganze Zahl (byte, char, short, int, aber kein long),
einen String
oder einen Enum (später dazu mehr)
entgegen.
int zahl = (int) (Math.random() * 6 + 1);
switch (zahl) {
}
© Prof. Dr. Steffen Heinzl
switch‐Statement
Die switch‐Anweisung beinhaltet verschiedene case‐Labels.
int zahl = (int) (Math.random() * 6 + 1);
switch (zahl) {
case 1:
System.out.println("Es wurde eine 1 gewürfelt.");
break;
case 3:
System.out.println("Es wurde eine 3 gewürfelt.");
case 4:
System.out.println("Es wurde eine 3 oder 4 gewürfelt.");
break; Im case muss ein konstanter
} Ausdruck vom Typ der Variablen
Es wird der case betreten, der mit zahl übereinstimmt. im switch stehen
Von dort werden alle Anweisungen bis zum nächsten
break oder dem Ende des switch‐Blocks ausgeführt. © Prof. Dr. Steffen Heinzl
switch‐Statement
Die switch‐Anweisung beinhaltet verschiedene case‐Labels.
int zahl = (int) (Math.random() * 6 + 1);
switch (zahl) {
case 1:
System.out.println("Es wurde eine 1 gewürfelt.");
break;
case 3:
case 4:
System.out.println("Es wurde eine 3 oder 4 gewürfelt.");
break;
default:
System.out.println("Es wurde keine 1, 3 oder 4 gewürfelt.");
}
Trifft kein case zu, wird die default‐Anweisung ausgeführt.© Prof. Dr. Steffen Heinzl
public static int tageImMonat(int monat) {
int tage;
switch(monat) {
case 1:
case 3: Methode zur Zuordnung
case 5:
case 7: der Anzahl Tage in einem
case 8:
case 10: Monat
case 12:
tage = 31;
break;
case 2:
tage = 28;
break;
case 4:
case 6: The local variable tage may not have
case 9: been initialized
case 11:
tage = 30;
break;
}
return tage;
© Prof. Dr. Steffen Heinzl
}
public static int tageImMonat(int monat) {
int tage = ‐1;
switch(monat) {
case 1:
case 3: Methode zur Zuordnung
case 5:
case 7: der Anzahl Tage in einem
case 8:
case 10: Monat
case 12:
tage = 31;
break;
case 2:
tage = 28;
break;
case 4:
case 6:
case 9:
case 11:
tage = 30;
break;
}
return tage;
© Prof. Dr. Steffen Heinzl
}
public static int tageImMonat(int monat) {
int tage;
switch(monat) {
case 1:
case 3:
case 5:
Methode zur Zuordnung
case 7:
case 8:
der Anzahl Tage in einem
case 10:
case 12:
Monat
tage = 31;
break;
case 2:
tage = 28;
break;
case 4:
case 6:
case 9:
case 11:
tage = 30;
break;
default:
tage = ‐1;
}
return tage; © Prof. Dr. Steffen Heinzl
}
public static int tageImMonat(int monat) {
int tage;
switch(monat) {
case 2:
Methode zur Zuordnung
tage = 28;
break;
der Anzahl Tage in einem
case 4: Monat
case 6:
case 9:
case 11:
tage = 30;
break;
default:
tage = 31;
}
return tage;
}
Was passiert bei monat < 1 oder monat > 12 ?
© Prof. Dr. Steffen Heinzl
public static int tageImMonat(int monat) {
int tage;
if (monat > 12 || monat < 1) return ‐1;
switch(monat) {
case 2:
Methode zur Zuordnung
tage = 28;
break;
der Anzahl Tage in einem
case 4: Monat
case 6:
case 9:
case 11:
tage = 30;
break;
default:
tage = 31;
}
return tage;
}
Was passiert bei monat < 1 oder monat > 12 ?
© Prof. Dr. Steffen Heinzl
public static int tageImMonat(String monat)
{
int tage;
switch(monat)
{ Methode zur Zuordnung
case "Februar":
tage = 28; der Anzahl Tage in einem
break;
case "April": Monat
case "Juni":
case "September":
case "November":
tage = 30;
break;
default:
tage = 31;
}
return tage;
}
© Prof. Dr. Steffen Heinzl
Was ist der Wert von routeNumber nach dem switch‐Block?
String zipCode = "93705";
int routeNumber;
switch (zipCode)
A: 0
{
case "93705":
case "93706":
routeNumber = 1;
B: 1
break;
case "93710":
case "93720":
routeNumber = 2;
break;
C: 2
}
default:
routeNumber = 0;
break;
D: nicht definiert
© Prof. Dr. Steffen Heinzl