Programmierkurs I
Herzlich Willkommen
Dr. Johannes Fuchs
Programmierkurs I
Ziele/Inhalte
1. Sie können ihren Code semantisch strukturieren.
2. Sie verstehen die Notwendigkeit Methoden zu verwenden
und können unterschiedliche Arten programmieren.
3. Sie können den sequentiellen Programmfluss mittels
Kontrollstrukturen lenken.
4. Sie können die Sichtbarkeit von Variablen deuten.
Lernziele
Folie: 11
1. Methoden
– (un)parametrisiert
– Mit/ohne Rückgabewert
– Sichtbarkeit von Variablen (method scope)
2. Kontrollstrukturen
– if else
– switch case
– Sichtbarkeit von Variablen (block scope)
Inhaltsverzeichnis
Folie: 12
Programmierkurs I
Methoden
public class Application
{
public static void main(String[] args)
{
//Start des Programms
[Link]("Hello World");
//Ende des Programms
}
}
Methoden - main
Folie: 14
Folie: 15
16
17
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
}
public static void printMethode()
{
[Link]("Hello World");
}
}
Methodenaufruf/deklaration
Folie: 18
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
}
Kopf/Signatur
public static void printMethode()
{
[Link]("Hello World");
}
}
Methodenaufruf
Folie: 19
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
} später (Kapitel Objektorientierung)
public static void printMethode()
{
[Link]("Hello World");
}
}
Methodenaufruf
Folie: 20
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
} Rückgabewert
public static void printMethode()
{
[Link]("Hello World");
}
}
Methodenaufruf
Folie: 21
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
} Bezeichner
public static void printMethode()
{
[Link]("Hello World");
}
}
Methodenaufruf
Folie: 22
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
} Übergabeparameter
public static void printMethode()
{
[Link]("Hello World");
}
}
Methodenaufruf
Folie: 23
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
}
public static void printMethode()
{
[Link]("Hello World"); Rumpf
}
}
Methodenaufruf
Folie: 24
• Bestehen aus einem Kopf und einem Rumpf.
• Kopf gleicht einer Überschrift.
– Rückgabetyp
– Bezeichner der Methode
– Übergabeparameter
• Im Rumpf werden die Java-Anweisungen festgelegt.
Methoden - Aufbau
Folie: 25
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode();
//Ende des Programms
} Übergabeparameter
public static void printMethode()
{
[Link]("Hello World");
}
}
Methoden - Parameter
Folie: 26
public class Application
{
public static void main(String[] args)
{
//Start des Programms
printMethode("Hello World");
//Ende des Programms
}
public static void printMethode(String text)
{
[Link](text);
}
}
Methoden - Parameter
Folie: 27
public static void main(String[] args)
{
//Start des Programms
rectangleArea();
//Ende des Programms
}
public static void rectangleArea()
{
int height = 5;
int width = 10;
int area;
area = height * width;
}
Methoden – Parameter – Beispiel
Folie: 28
public static void main(String[] args)
{
//Start des Programms
rectangleArea(2, 3);
//Ende des Programms
}
public static void rectangleArea(int height, int width)
{
int area;
area = height * width;
}
Methoden – Parameter – Beispiel
Folie: 29
public static void main(String[] args)
{
//Start des Programms
rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
int area;
area = height * width;
return area;
}
Nach dem return-Statement darf kein
Code im gleichen Block mehr stehen.
Methoden - Rückgabewerte
Folie: 30
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
int area;
area = height * width;
return area;
}
Code
Methoden - Rückgabewerte
Folie: 31
public static void main(String[] args)
{
//Start des Programms
boolean nandGate = nAnd(true, false);
//Ende des Programms
}
public static boolean nAnd(boolean a, boolean b)
{
boolean result;
result = !(a && b);
return result;
}
Methoden – Rückgabewerte – Beispiel
Folie: 32
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
double result2 = rectangleArea(1.5, 4.2);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width;
}
public static double rectangleArea(double height, double width)
{
return height * width;
}
Methoden – Überladen
Folie: 33
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
double result2 = rectangleArea(1.5, 4.2);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width; Bezeichner sind identisch
}
public static double rectangleArea(double height, double width)
{
return height * width;
}
Methoden – Überladen
Folie: 34
public class Application
{
public static void main(String[] args)
{
//Start des Programms
[Link]("Verhaften Sie die ueblichen Verdaechtigen!");
[Link](true);
[Link](145);
[Link]();
//Ende des Programms
}
}
Methoden – Überladen
Folie: 35
public static void main(String[] args)
{
//Start des Programms
[Link](args[0]);
//Ende des Programms
}
Code
Methoden - Parameter
Folie: 36
public static void main(String[] args)
{
//Start des Programms Array (Kapitel Schleifen)
[Link](args[0]);
//Ende des Programms
}
Methoden - Parameter
Folie: 37
Methoden - Parameter
Folie: 38
Methoden - Parameter
Folie: 39
args[0]
args[1]
Methoden - Parameter
Folie: 40
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width;
}
Methoden – Warum Parameter und Rückgabewerte
Folie: 41
Lokale Variablen
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
Lokale Variablen //Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width;
}
Lokale Variablen
Methoden – Warum Parameter und Rückgabewerte
Folie: 42
Lokale Variablen
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width;
}
Methoden – Warum Parameter und Rückgabewerte
Folie: 43
public static void main(String[] args)
{
Lokale Variablen //Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width;
}
Methoden – Warum Parameter und Rückgabewerte
Folie: 44
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
return height * width;
}
Lokale Variablen
Methoden – Warum Parameter und Rückgabewerte
Folie: 45
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
}
public static int rectangleArea(int height, int width)
{
int result = height * width;
return result;
}
Methoden – Warum Parameter und Rückgabewerte
Folie: 46
public static void main(String[] args)
{
//Start des Programms
int result = rectangleArea(2, 3);
//Ende des Programms
2
}
unterschiedliche
public static int rectangleArea(int height, int width)
lokale Variablen
{
int result = height * width;
return result;
}
Methoden – Warum Parameter und Rückgabewerte
Folie: 47
int start = 0;
[Link]("1. Value of start: " + start);
methodFirst();
[Link]("2. Value of start: " + start);
methodSecond(start);
[Link]("4. Value of start: " + start);
[Link]("6. Value of start: " + methodThird(start));
Code
Method Scope
Folie: 48
public static void main(String[] args)
{
int a = 0;
increment(a);
a = incrementReturn(incrementReturn(a));
[Link]("a: " + a);
}
public static void increment(int a)
{
a = a + 1;
}
public static int incrementReturn(int a) A=0
{
a = a + 1;
B=1
return a; C=2
}
D=3
Hands-On-Session
Folie: 49
• Schreiben Sie zu jeder Methode einen passenden JavaDoc.
• Der JavaDoc beinhaltet Informationen über den:
– Inhalt: was macht die Methode?
– Übergabeparameter: was muss ich der Methode mitgeben, damit sie
korrekt funktioniert?
– Rückgabewert: was liefert mir die Methode?
• Weitere Informationen finden Sie hier:
[Link]
Methoden – JavaDoc
Folie: 50
/**
* This method calculates the area of a rectangle.
*
* @param height - the height of the rectangle
* @param width - the width of the rectangle
* @return the area of the rectangle as integer
*/
public static int rectangleArea(int height, int width)
{
return height * width;
}
Methoden – JavaDoc – Beispiel
Folie: 51
Programmierkurs I
Kontrollstrukturen
• Verzweigungen steuern den Programmfluss.
• Sie gehören deshalb zu den Kontrollstrukturen eines
Programms Aufstehen
Zähne putzen
nein ja
Kaffee trinken Hunger? Müsli essen
Verzweigungen / Bedingungen
Folie: 53
• Größer (>)
• Kleiner (<)
• Größer-gleich (>=)
• Kleiner-gleich (<=)
• Gleichheit (==) int a = 10;
int b = 20;
• Ungleichheit (!=)
boolean result = a == b;
boolean result = a = b;
Kompilierfehler
Vergleichsoperatoren (RECAP)
Folie: 54
• Nicht (!a)
• Und (a && b)
• Oder (a || b)
• Xor (a ^ b)
boolean a boolean b !a a && b a || b a^b
true true false true true false
true false false false true true
false true true false true true
false false true false false false
Logische Operatoren (RECAP)
Folie: 55
boolean isChecked = true;
char state;
if(isChecked == true)
{
state = '+';
}
else
{
state = '-';
}
If - Verzweigung
Folie: 56
boolean isChecked = true;
char state;
if(isChecked == true) Verzweigung: das Statement ist wahr
{
state = '+';
}
else
{
state = '-';
}
If - Verzweigung
Folie: 57
boolean isChecked = true;
char state;
if(isChecked == true)
{
state = '+';
}
else Verzweigung: das Statement ist falsch
{
state = '-';
}
If - Verzweigung
Folie: 58
boolean isChecked = true;
char state;
if(isChecked == true)
{
state = '+'; 1. Block
}
else
{
state = '-'; 2. Block
}
If - Verzweigung
Folie: 59
boolean isChecked = true;
char state;
if(isChecked)
state = '+';
else
state = '-';
If – Verzweigung (Schnellschreibweise)
Folie: 60
boolean isChecked = true;
char state;
if(isChecked)
state = '+';
[Link]("True");
else
state = '-';
[Link]("False");
Code
If – Verzweigung (Schnellschreibweise)
Folie: 61
boolean isChecked = true;
char state;
if(isChecked)
state = '+';
l er
else
[Link]("True");
Fe h
state = '-';
h r
[Link]("False");
efa
G
If – Verzweigung (Schnellschreibweise)
Folie: 62
• Bug in Apple-Software (2014)
Seien Sie bitte vorsichtig!
Folie: 63 [Link]
boolean hungry = true;
boolean workingDay = false;
String state = "";
if(hungry == true)
{
state = "eat something";
}
if(workingDay == true)
{
state = state + " go to work";
}
else
{
state = state + " stay at home"; Code
}
Demo-Codebeispiel
Folie: 64
boolean hungry = true;
boolean workingDay = false;
String state = "";
if(hungry == true)
{
state = "eat something";
}
else if(workingDay == true)
{
state = state + " go to work";
}
else
{
state = state + " stay at home"; Code
}
Demo-Codebeispiel
Folie: 65
• Verzweigungen funktionieren nicht nur auf booleans.
Integer:
int income = 10000;
if(income > 5000)
[Link]("I am rich!");
If – Verzweigung (Wahrheitswerte)
Folie: 66
• Verzweigungen funktionieren nicht nur auf booleans.
Integer:
int income = 10000;
if(income > 5000)
[Link]("I am rich!");
String:
String menu = "Pommes";
if([Link]("Pommes"))
[Link]("Mensa!");
If – Verzweigung (Wahrheitswerte)
Folie: 67
• Mehrere Abfragen in einem Statement
AND:
int income = 10000;
if(income > 5000 && hungry == true)
[Link](”Restaurant");
else
[Link]("Stamm");
If – Verzweigung (Kombinationen)
Folie: 68
• Mehrere Abfragen in einem Statement
OR:
String status = "student";
if([Link]("student") || hungry == true)
[Link]("Pause");
else
[Link]("Arbeiten");
If – Verzweigung (Kombinationen)
Folie: 69
boolean a, b, c, d;
a = false; b = true; c = false; d = true;
if(a && b || c && d) [Link](”A");
if(a && b && c || d) [Link](”B");
if(a && b && (c || d)) [Link](”C");
A=A
B=B
C=C
Hands-On-Session
Folie: 70
• Wenn man sehr viele Möglichkeiten einer
Programmverzweigung hat.
• Funktioniert allerdings nicht bei allen Datentypen z.B. boolean
Aufstehen
Zähne putzen
8 Uhr 7 Uhr
Kaffee trinken Uhrzeit? Müsli essen
9 Uhr
Zur Arbeit
Switch - Verzweigung
Folie: 71
Default:
int count = 0;
switch(count)
{
case 0:
[Link]("zero");break;
case 1:
[Link]("one"); break;
case 2:
[Link]("two"); break;
default:
[Link]("?"); break;
}
Switch - Verzweigung
Folie: 72
String:
String status = "bad";
switch(status)
{
case "bad":
[Link]("Needs to be repaired...");break;
case "average":
[Link]("No worries..."); break;
case "optimal":
[Link]("Everything is working..."); break;
default:
[Link]("Undefined status..."); break;
}
Switch - Verzweigung
Folie: 73
boolean severe = false;
String message = "headache";
switch(message)
{
case "cold":
if(severe == true) [Link]("Go to bed...");
else [Link]("Go to work...");
break;
case "fever":
if(severe == true) [Link]("See a doctor...");
else [Link]("Go to bed...");
break;
case "headache":
if(severe == true) [Link]("Go to a hospital...");
else [Link]("Simulating?");
break;
default:
[Link]("Unknown disease"); break;
}
Switch – Verzweigung (Kombination)
Folie: 74
int days;
String month = "February";
switch(month)
{
case "January", "March", "May", "July",
"August", "October", "December" -> {days = 31;}
case "April", "June", "September",
"November" -> {days = 30;}
case "February" -> {days = 28;}
default -> days = 0;
}
[Link]("Days: " + days);
Switch – Verzweigung (Neuerung)
Folie: 75
int days;
String month = "February";
switch(month)
{
case "January", "March", "May", "July",
"August", "October", "December" -> {days = 31;}
case "April", "June", "September",
"November" -> {days = 30;}
case "February" -> days = 28;
Kein break; Statement
default -> days = 0;
}
[Link]("Days: " + days);
Switch – Verzweigung (Neuerung)
Folie: 76
int day = switch(month)
{
case "January", "March", "May", "July",
"August", "October", "December" -> 31;
case "April", "June", "September",
"November" -> 30;
case "February" -> 28;
default -> 0;
};
[Link]("Days: " + day);
Switch – Verzweigung (Neuerung)
Folie: 77
Direkte Zuweisung der “switch” Auswertung
int day = switch(month)
{
case "January", "March", "May", "July",
"August", "October", "December" -> 31;
case "April", "June", "September",
"November" -> 30;
case "February" -> 28;
default -> 0;
};
Semikolon nicht vergessen!
[Link]("Days: " + day);
Switch – Verzweigung (Neuerung)
Folie: 78
Aufgabe: Ermitteln Sie den nächsten Alien
Hands-On-Session
Folie: 79 [Link]
int start = 0;
if(start == 0)
{
start = 10; //I can access start
int end = 0;
[Link]("1. end: " + end);
}
[Link]("1. start: " + start);
//I cannot access end
[Link]("2. end: " + end);
Code
Block Scope
Folie: 80
• Wie viele Fehler finden Sie:
int check = 0;
switch(check)
{
case 0:
int first = 0;
int check = 10;
case 1:
if(first == 0) check++;
else check--;
default:
int third = 0;
}
[Link](third);
Hands-On-Session
Folie: 81
• Wie viele Fehler finden Sie:
int check = 0;
switch(check)
{
case 0:
int first = 0;
int check = 10;
case 1:
if(first == 0) check++;
else check--;
default:
A=1
int third = 0; B=2
}
[Link](third); C=3
Hands-On-Session
Folie: 82
• Lokale Variablen sind nicht in der ganzen Klasse sichtbar.
• Unter Bedingung versteht man einen beliebigen Ausdruck,
dessen Auswertung einen Wahrheitswert(true oder false)
liefert.
• Die Werte hinter dem Schlüsselwort case müssen Konstanten
sein und alle einen unterschiedlichen Wert haben.
Merke
Folie: 83
Unbekannt:
while do for package class public private this new static final null
extends super instanceof abstract interface implements import throw
throws try catch synchronized
Neu:
void return if else switch case default break
Bekannt:
byte short int long float double char String boolean true
false void return if else switch case default break
Leistungsfortschritt - Schlüsselwörter
Folie: 84
Programmierstil:
• Korrektes Einrücken bei Blöcken
– Kontrollstrukturen, Methoden, ...
• JavaDoc-Kommentar bei Methoden
– Beschreibung, Übergabeparameter, Rückgabewerte, ...
Programmierstil
Folie: 85
Minecraft:
• [Link]
Easy:
• [Link]
Medium:
• [Link]
• [Link]
Ich will mehr...
Folie: 86