javakurs fss 2012 lehrstuhl stuckenschmidt tag 2 – arrays, methoden und rekursion
TRANSCRIPT
![Page 1: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/1.jpg)
Javakurs FSS 2012
Lehrstuhl Stuckenschmidt
Tag 2 – Arrays, Methodenund Rekursion
![Page 2: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/2.jpg)
Arrays
• Arrays sind Folgen gleichartiger Variablen:• Mathematisch: x0, x1, x2, ..., xn
• Java: x[0], x[1], x[2], ..., x[n]
• Arrays haben eine feste Länge
0 1 2 3
34 12 17 22
![Page 3: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/3.jpg)
Deklarieren / Initialisieren
• Deklarieren• Bekannt machen (z.B. einer Variable)
• Initialisieren• Zuweisung eines Wertes
int zahl;char buchstabe;
zahl = 5;buchstabe = ‘c‘;
![Page 4: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/4.jpg)
Deklarieren eines Arrays
• Deklarieren• Bekannt machen (z.B. einer Variable)
• zahlen ist eine Folge von ganzen Zahlen
• wort ist eine Folge von Zeichen
int[] zahlen; char[] wort;
![Page 5: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/5.jpg)
Initialisieren eines Arrays
• Initialisieren mit new• Ausführliche Schreibweise:
• Kompakte Schreibweise:
Array besteht aus Default WertenInitialisierung über die Länge
int[] zahlen; //Deklarationzahlen = new int[4]; //Default Werte
int[] zahlen = new int[4];
![Page 6: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/6.jpg)
Initialisieren eines Arrays
• Zuweisen von eigenen Werten
• Ähnlich wie bei primitiven Datentypen
• Jedes Feld muss separat betrachtet werden
zahlen[0] zahlen[1] zahlen[2] zahlen[3]34 12 17 22
int[] zahlen = new int[4];zahlen[0] = 34;zahlen[1] = 12;zahlen[2] = 17;zahlen[3] = 22;
zahlen[0] zahlen[1] zahlen[2] zahlen[3]0 0 0 0
![Page 7: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/7.jpg)
Initialisieren eines Arrays
• Geht das nicht schneller?• Ausführliche Schreibweise
• Kompakte Schreibweise
Keine Angabe der Länge!
int[] zahlen; zahlen = new int[]{34, 12, 17, 31};
zahlen[0] zahlen[1] zahlen[2] zahlen[3]34 12 17 22
int[] zahlen =new int[]{34, 12, 17, 31};
![Page 8: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/8.jpg)
Initialisieren eines Arrays
• Nicht schnell genug?• Kompakte Schreibweise
Vorsicht: Ausführliche Schreibweise existiert nicht!
int[] zahlen = {34, 12, 17, 31};
zahlen[0] zahlen[1] zahlen[2] zahlen[3]34 12 17 22
![Page 9: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/9.jpg)
Länge eines Arrays
• Jeder Array hat eine Variable length– Entspricht der Länge des Arrays
– int und final• Auslesen der Länge:
• Konsolenausgabe:
Das letzte Feld eines Arrays ist length-1!!
int[] zahlen = {34, 12, 17, 31};System.out.println(zahlen.length);
4
![Page 10: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/10.jpg)
Aufrufen von Elementen
• Zugriff auf die Elemente über den Index
• Konsolenausgabe:
int[] zahlen = {34, 12, 17, 22};System.out.println(zahlen[1]);System.out.println(zahlen[2]);System.out.println(zahlen[4]);
zahlen[0] zahlen[1] zahlen[2] zahlen[3]34 12 17 22
1217
![Page 11: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/11.jpg)
Aufrufen von Elementen
• Zugriff auf die Elemente über den Index
• Konsolenausgabe:
int[] zahlen = new int[4];System.out.println(zahlen[1]);System.out.println(zahlen[2]);System.out.println(zahlen[4]);
zahlen[0] zahlen[1] zahlen[2] zahlen[3]0 0 0 0
00
![Page 12: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/12.jpg)
Arrays und for-Schleifen
• Perfekt zum Durchlaufen von Arrays
• Konsolenausgabe:
char[] alphabet = {‘a‘, ‘b‘, ‘c‘, ..., ‘y‘, ‘z‘};for(int n = 0; n < alphabet.length; n++){ System.out.print(char[n] + “ “);}
a b c d e f g h i j k ...
![Page 13: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/13.jpg)
Arrays und for-Schleifen
• Berechnung der Summe
• Konsolenausgabe:
int[] zahlen = {34, 12, 17, 22};int sum = 0; for(int n = 0; n < zahlen.length; n++){ sum += zahlen[n];}System.out.println(sum);
85
![Page 14: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/14.jpg)
Arrays und for-Schleifen
• Erweiterte for-Schleife
• Konsolenausgabe:
int[] zahlen = {34, 12, 17, 22};int sum = 0; for(int zahl : zahlen){ sum += zahl;}System.out.println(sum);
85
![Page 15: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/15.jpg)
Arrays und for-Schleifen
• Erweiterte for-Schleife• Kurze Schreibweise
• Entspricht:
for(int zahl : zahlen){ //bla}
for(int n = 0, zahl; n < zahlen.length; n++){ zahl = zahlen[n]; //bla}
![Page 16: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/16.jpg)
Arrays und for-Schleifen
• Typische Suche in einem Array
• Konsolenausgabe:
int position = 0;for(int n = 0; n < alphabet.length; n++){ if(alphabet[n] == ‘d‘){ position = n + 1; break; }} System.out.println(position);
4
![Page 17: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/17.jpg)
Mehrdimensionale Arrays
• Arrays von Arrays• Erste Dimension stellen die Zeilen dar
• Zweite Dimension stellen die Spalten dar
0 1 2
11 3 8
0 1 2
34 12 17
0 Verweis
1 Verweis
1. Array
2. Array
3. Array
![Page 18: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/18.jpg)
Mehrdimensionale Arrays
• Nichtrechteckige Arrays• Jede Zeile kann eine eigene Größe haben!
0 1 2 3 4
H a l l o
0 1 2 3
W e l t
0 Verweis
1 Verweis
![Page 19: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/19.jpg)
Deklarieren und Initialisieren
• Deklarieren• Äquivalent wie beim eindimensionalen Array
• Keine Unterschied zwischen rechteckigen und nichtrechteckigen Arrays
int[][] matrix; char[][] halloWelt;
![Page 20: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/20.jpg)
Initialisieren eines Arrays
• Initialisieren mit new• Rechteckige Arrays:
• Nichtrechteckige Arrays
int[][] matrix = new int[2][3]
char[][] halloWelt = new char[2][];halloWelt[0] = new char[5];halloWelt[1] = new char[6]
![Page 21: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/21.jpg)
Initialisieren eines Arrays
• Zuweisen von eigenen Werten• Ähnlich wie bei eindimensionalen Array
• Jedes Feld muss separat betrachtet werden
int[][] matrix = new int[2][3];zahlen[0][0] = 11;zahlen[0][1] = 3;zahlen[0][2] = 8;
0 1 2
11 3 8
0 1 2
0 0 0
0 Verweis
1 Verweis
![Page 22: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/22.jpg)
Initialisieren eines Arrays
• Geht das nicht schneller?
• Mengenklammern trennen Dimensionen
int[] matrix = {{11, 3, 8},{34, 12, 17}};
0 1 2
11 3 8
0 1 2
34 12 17
0 Verweis
1 Verweis
![Page 23: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/23.jpg)
Hallo Weltchar[][] halloWelt = {{'H', 'a', 'l', 'l', 'o'}, {'W', 'e', 'l', 't'}};
for(char[] wort : halloWelt){ for(char c : wort){ System.out.print(c); }}
0 1 2 3 4
H a l l o
0 1 2 3
W e l t
0 Verweis
1 Verweis
![Page 24: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/24.jpg)
String in Array
• toCharArray()• Wandelt einen String in einen Array um
String str = “Hallo“;str.toCharArray();
0 1 2 3 4
H a l l o
![Page 25: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/25.jpg)
Array Exceptions
• Array Index Out Of Bounds Exception
• Index im Array nicht vorhanden
• Null Pointer Exception
• 2te Dimension noch nicht initialisiert
int[] zahlen = {12, 32, 24, 17};System.out.println(zahlen[4]);
char[][] halloWelt = new char[2][];System.out.println(halloWelt[0][0]);
![Page 26: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/26.jpg)
Methoden
• Funktionen einer Klasse/Objektes
• Aber warum Methoden?• Zerlegung komplexer Programme in kleine Teile
• Wiederkehrende „Programmteile“ schon verfügbarpublic static void halloWelt(){ System.out.println(“Hallo Welt!“);}
![Page 27: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/27.jpg)
Aufbau von Methoden
• Methoden bestehen aus:• Methodenkopf
• Methodenrumpf{ System.out.println(“Hallo Welt!“);}
public static void halloWelt()
private static double mwSt(double betrag)
{ return betrag * 0.19;}
![Page 28: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/28.jpg)
Aufbau von Methoden
• Methodenkopf• Sichtbarkeit• Methodentyp (Rückgabetyp)• Methodenname• Methodenparameter
public static void halloWelt()
Beschreibt den Typ einer MethodeName der MethodeParameter der Methode
![Page 29: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/29.jpg)
Aufbau von Methoden
• Methodenkopf• Sichtbarkeit• Methodentyp (Rückgabetyp)• Methodenname• Methodenparameter
private static double mwSt(double betrag)
Beschreibt den Typ einer MethodeName der MethodeParameter der Methode
![Page 30: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/30.jpg)
Aufbau von Methoden
• Methodenrumpf 1. Öffnenden Klammer2. Folge von Anweisungen3. return (optional bei void) 4. Schließende Klammer
{ return betrag * 0.19;}
{ System.out.println(“Hallo Welt!“);}
![Page 31: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/31.jpg)
Return
• return• Ein Rückgabewert pro Methode• Beendet Methode (vorzeitig)static void sqrt(double d){ if ( d < 0){ return; } System.out.println(Math.sqrt(d));}
static int soNicht(){ int i = 0; return i; i = 2; //Unreachable Code}
![Page 32: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/32.jpg)
Methodentypen
• void• Verwendung für Methoden ohne Rückgabewerte• Bzw für Methoden die keinen Wert berechnen• return optional ohne Wertpublic static void halloWelt(){ System.out.println(“Hallo Welt!“);}
![Page 33: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/33.jpg)
Methodentypen
• Datentypen• Verwendung für Methoden mit Rückgabewerte• Benötigt return• Rückgabewert muss der selbe Datentyp sein
» int, char, double... aber auch Objekte
public static double mwSt(int betrag){ return betrag * 0.19;}
![Page 34: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/34.jpg)
public static double mwSt(double betrag){ System.out.println(“Methode mit fester MwSt!“); return betrag * 0.19;}
Methodenparameter
• Parametrisierte Funktion• Übergabe von Werten an eine Methode• Methode kann diese Werte verwenden• Generische Methoden möglich
public static double mwSt(double betrag, double satz){ System.out.println(“Methode mit variabler MwSt!“); return betrag * satz;}
![Page 35: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/35.jpg)
Methodenparameter
• Wertübergabe• Übergabe von Werten an Methode bei Aufruf• Bei gleichem Methodennamen wird mit Parameter zwischen den einzelnen Methoden differenziert
• Konsolenausgabe:
public static void main(String[] args){ System.out.println(mwSt(10)); System.out.println(mwSt(10,0.19));}
Methode mit fester MwSt!1.9Methode mit variabler MwSt!1.9
![Page 36: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/36.jpg)
Rekursion
• „Zurücklaufen“• Eine Funktion durch sich selbst zu definieren
• Problem Binärzahl ist spiegelverkehrt!
static void inBinaer(int dezimal){ while(dezimal > 0){ System.out.print(dezimal % 2); dezimal = dezimal / 2; }}
![Page 37: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/37.jpg)
Rekursion
• „Zurücklaufen“• Eine Funktion durch sich selbst zu definieren
• Problem Binärzahl ist spiegelverkehrt!
static void inBinaer(int dezimal){ if(dezimal < 2) System.out.print(dezimal); else{ inBinaer(dezimal / 2); System.out.print(dezimal % 2); }}
![Page 38: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/38.jpg)
Rekursionstatic int fakul(int zahl) { if(n == 0) return 1; else return fakul(n-1)* n;}
fakul(4) = *
4*
2
3*
*
11
*
4*
2
3*
*
1fakul(0)
*
4*
2
3*
fakul(1)
*
4*
3fakul(2)
*
4fakul(3)
Wie funktioniert Rekursion?
![Page 39: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/39.jpg)
*
4*
32
*
4*
2
3*
1
*
4*
2
3*
*
1
Rekursionstatic int fakul(int zahl) { if(n == 0) return 1; else return fakul(n-1)* n;}
fakul(4) = *
4*
2
3*
*
11
*
46
Wie funktioniert Rekursion?
24
![Page 40: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/40.jpg)
Wechselseitige Rekursion
• Zwei oder mehr Funktionen• Wechselseitigen Bezug aufeinander
• Problem Binärzahl ist spiegelverkehrt!
static boolean istUngerade(int zahl) { if(zahl == 0) { return false; } return istGerade(zahl-1);}
static boolean istGerade(int zahl) { if(zahl == 0){ return true; } return istUngerade(zahl-1);}
![Page 41: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/41.jpg)
Endlose Rekursion
• Terminiert nicht (Ähnlich wie bei Schleifen)
![Page 42: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion](https://reader036.vdocuments.net/reader036/viewer/2022062417/55204d7349795902118c7b80/html5/thumbnails/42.jpg)
Fragen?