252-0027
Einführung in die Programmierung
2.0 Einfache Java Programme
Übersicht
§ 2.0 Einfache Java Programme
§ 2.1 Methoden
§ Struktur
§ 2.2 Typen und Variable
§ Einfache (eingebaute) Typen
§ Deklaration von Variablen
2.0 Einfache Java Programme
§ Übersicht
§ Struktur
§ Namen
§ Output
2.0 Einfache Java Programme
§ Sie sollten Übung 0 gemacht haben
§ Oder sicher sein dass diese keine Schwierigkeiten macht
§ Ab Übung 1 müssen Sie in “myStudies” registriert sein um Aufgaben abgeben zu können
§ Stellt sicher dass Sie Programmfragmente erhalten können und Lösungen abgeben können
§ Fragen sie im Gruppentreffen heute/morgen bei Problemen
Beispiel: Bezeichner (“identifier”)
Java Regeln (vereinfacht)
EBNF Beschreibung bezeichner
lowercaseletter ⟸ a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
uppercaseletter ⟸ A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
letter ⟸ lowercaseletter | uppercaseletter
digit ⟸ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7| 8 | 9
Java Programme
§ Erstellen
§ Ausführen
§ Modifizieren
§ Eclipse IDE
Java
§ Wir ignorieren fürs erste viele Aspekte die nicht absolut notwendig zum Verständnis sind
§ 1. Ziel: Programm lesen
§ 2. Ziel: Programm verstehen
§ 3. Ziel: Programm erstellen
§ Oft durch Modifikation eines Programmes
§ Wir können aber nicht alles ignorieren …
Java Programm
javaprogram ⟸ public class bezeichner { method
}
Java Programm
javaprogram ⟸ public class bezeichner { method
}
method ⟸ public static void bezeichner ( String [ ] args ) {
statementsequence
§ main: Java Methode (Java Code den wir ausführen können)
§ Methode enthält Aufreihung (“sequence”) von Anweisungen
Java
§ Nicht alle Rückmeldungen des Übersetzers (“compilers”) sind
so klar
Wir machen mal weiter ….
§ Leicht zu übersehen: die letzte } fehlt
Zusammenfassung
public class name {
public static void main(String[] args) { statement;
statement;
...
statement;
} }
class: ein Programm mit Namen
statement: Anweisung die ausgeführt werden soll
method: Gruppe von
Anweisungen mit Namen main
Folge von Anweisungen
für jshell
§ Jedes (ausführbare) Java Programm besteht aus einer Klasse ( class )
§ die eine Methode main enthält,
§ die eine Reihe von Anweisungen enthält
§ Später arbeiten wir mit Programmen mit mehreren Klassen
Namen und Bezeichner
§ Jedes Programm braucht einen Namen public class HelloWorld {
§ Konvention: fängt mit Grossbuchstaben an
§ Konvention: Grossbuchstaben zur verbesserten Lesbarkeit
§ Regel: Dateiname gleich Programmname HelloWorld.java
§ Gross/Kleinbuchstaben sind (in Java) unterschiedlich
Wo sollten Kommentare stehen
§ Anfang des Programms
§ Zweck
§ Algorithmus
§ Author
§ Anfang jeder Methode
§ Darüber später mehr
§ Für Code der nicht sofort verständlich ist
§ Kommentare wichtig für grosse Projekte, Programme mit
mehreren Authoren, Programme die sich oft ändern
Beispiel
/*
* Author: Vorname Nachname; Herbst 2019, Uebung 1
* Entwurf uebernommen von Frau V. Nachname (Assistentin)
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
Beispiele
§ Beispiel:
System.out.println(“\\Hallo\nWie\tgeht es \”Ihnen\”?\\\\");
§ Output:
Beispiele
§ Beispiel:
System.out.println(“\\Hallo\nWie\tgeht es \”Ihnen\”?\\\\");
§ Output:
\Hallo
Fragen
§ Was drucken diese println Statements?
System.out.println("\ta\tb\tc");
System.out.println("\\\\");
System.out.println("'");
System.out.println("\"\"\"");
System.out.println("C:\neuer Spor\t Wagen");
§ Welches println Statement druckt diesen String?
/ \ // \\ /// \\\
Antwort
§ Output jedes println Statements:
a b c
\\
'
"""
C:
Antwort
§ println Statement um die gewünschte Zeitle Output zu erzeugen:
System.out.println("/ \\ // \\\\ /// \\\\\\");
252-0027
Einführung in die Programmierung 2.1 Methoden
Thomas R. Gross
Übersicht
§ 2.0 Einfache Java Programme
§ 2.1 Methoden
§ Struktur
§ 2.2 Typen und Variable
§ Einfache (eingebaute) Typen
§ Deklaration von Variablen
Zusammenfassung
public class name {
public static void main(String[] args) { statement;
statement;
...
statement;
}
class: ein Programm mit Namen
method: Gruppe von
Anweisungen mit
Namen main
Beispiel
/*
* Author: Ein Student; Herbst 2017, Uebung 1
* Entwurf uebernommen von einer Assistentin
*/
public class HelloWorld {
public static void main(String[] args) { System.out.println("Hello World!");
} // end main
} // end HelloWorld
2.1 Methoden
§ Beispiel: main im Program HelloWorld
§ Eine Klasse kann mehrere Methoden enthalten.
Methoden
§ Methode: Sequenz von Anweisungen mit einem Namen (dem der Methode)
§ Methoden strukturieren die Anweisungen
§ Anstatt alle Anweisungen in einer Methode (main) unterzubringen
§ Methoden erlauben es, Wiederholungen zu vermeiden
§ Eine (neue) Methode stellt eine neue Anweisung zur
static methods
§ static methods: Methode mit weiteren Eigenschaften
§ main ist eine static method (Keyword static vor Name)
§ main wird automatisch aufgerufen
§ Wir erklären gleich wie andere Methoden aufgerufen werden
(Zu) Einfaches Beispiel
public class PrintExample1 {
public static void main(String[] args) { System.out.println("\n---\n");
System.out.println("Warnung: sichern Sie die Daten\n");
System.out.println("\n---\n");
System.out.println("Lange Erklaerung");
System.out.println("\n---\n");
Output ---
Warnung: sichern Sie die Daten ---
Lange Erklaerung ---
Warnung: sichern Sie die Daten
---
Wie entstehen Methoden?
§ Entwickeln des Algorithmus
§ Lösung des Problems
§ Aufteilung in Teil-Probleme
§ Deklaration des Algorithmus (auf- schreiben, codieren)
§ Ausführen (aufrufen, “call”,
class
method main
n
statement
n
statement
n
statement method one
n
statement
n
statement
method two
(Zu) Einfaches Beispiel
public class PrintExample2 { // main fehlt noch
public static void printWarning() {
System.out.println("\n---\n");
System.out.println("Warnung: sichern Sie die Daten\n");
System.out.println("\n---\n");
}
}
§ Entwickeln des Algorithmus
§ Lösung des Problems
§ Aufteilung in Teil-Probleme
§ Deklaration des Algorithmus (auf- schreiben, codieren)
§ Ausführen (aufrufen, “call”,
class
method main
n
one
n
statement
n
two
method two
n
statement
n
statement method three
Wie entstehen Methoden?
(Zu) Einfaches Beispiel
public class PrintExample2 {
public static void main(String[] args) { printWarning();
System.out.println("Lange Erklaerung");
printWarning();
} // main
public static void printWarning() {
System.out.println("\n---\n");
System.out.println("Warnung: sichern Sie die Daten\n");
System.out.println("\n---\n");
}
}
Aufruf einer Methode
§ Syntax:
name();
§ Mehrfaches Aufrufen ist zulässig
methodinvocation ⟸ bezeichner ( ) ;
§ Beispiel:
Aufruf einer Methode
§ Wenn die Anweisung name() (für die Methode name) ...; // irgendeine Anweisung
name (); // z.B. in main
stmtN; // naechste Anweisung
ausgeführt wird, dann wird die Methode name aufgerufen ("invoked", "called")
§ Damit beginnt die Ausführung der Methode name .
§ Es gibt auch andere Wege, eine Ausführung zu starten, aber diese interessieren uns (noch) nicht.
§ Wenn name fertig ist, geht es mit stmtN weiter
§ Wenn eine Methode aufgerufen wird, dann
§ ”springt” die Ausführung zur Methode und führt die Anweisungen der Methode aus und danach
§ ”springt" die Ausführung wieder zu dem Ort zurück von dem der Aufruf erfolgte
§ Und es geht weiter mit der nächsten Anweisung
§ Anordnung der Methoden im Programm(text) ohne Bedeutung
Kontrollfluss bei Methodenaufruf
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
Hier fangen
wir an
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
1. Anweisung
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
Hier geht es
weiter
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
1. und letzte
Anweisung
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
Hier geht es
weiter
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
Hier geht es
weiter
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
1. Anweisung
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
Hier geht es
weiter
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
1. und letzte
Anweisung
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
Hier geht es
weiter
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
Hier geht es
weiter
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
Letzte
Anweisung
Methoden die Methoden aufrufen
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Ende von \"main\" ");
} // main
public static void message1() {
System.out.println("Nachricht 1: Fertig");
} // message1
public static void message2() {
System.out.println("Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2
}
Output
§ Nachricht 1: Fertig
§ Die 2. Nachricht:
§ Nachricht 1: Fertig
§ Ende von Nachricht 2
§ Ende von "main"
public class MethodsExample {
public static void main(String[] args) { message1();
message2();
System.out.println("Done with \"main\".");
} ...
public static void message1() {
System.out.println("Nachricht 1: Fertig");
}
public static void message2() {
System.out.println(" Die 2. Nachricht:");
message1();
System.out.println("Ende von Nachricht 2");
}
public static void message1() {
System.out.println("Nachricht 1: Fertig");
}
Kontrollfluss
Einfaches Beispiel
(Wir verwenden jetzt println weil es einfach ist. Spätere
Java Programme benutzen eine andere Schnittstelle für
Benutzer.)
Beispiel mit static methods
Schreiben Sie ein Programm um diese Figuren zu drucken
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
\ /
\______/
______
/ \ / \ +---+
Entwicklungsschritte
Version 1: (ohne Ausnutzen der Struktur)
n
Erstellen Sie ein Programm mit leerer main Methode.
n
Kopieren Sie den erwünschten Output in main und schreiben für jede Zeile eine entsprechende
System.out.println Anweisung.
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
Program Version 1
public class Figures1 {
public static void main(String[] args){
System.out.println(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println();
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println("+---+");
System.out.println();
System.out.println(" ______");
System.out.println("/ \\");
System.out.println("| STOP |");
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println();
System.out.println(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
System.out.println("+---+");
} // main
Entwicklungsschritte
Version 2: (mit Ausnutzen der Struktur, mit Redundanz)
n
Identifizieren Sie (eventuell vorhandene) Strukture(n).
n
Unterteilen Sie die main Methode basierend auf Ihrer Strukturierung.
n
Führen Sie die Methode aus um den Output mit der
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
Struktur des Output
Strukturen in dieser Figur
n
oben: Sechseck (Hexagon) (oder Ball …)
n
darunter: ”Wanne” (oder Suppentasse …)
n
drittens ”STOP Schild" Figur
n
viertens ”Trapez" (oder Hut Figur …) Struktur à Methoden :
n
hexagon
n
wanne
n
stopSign
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
\ /
\______/
______
/ \ / \
Program Version 2
public class Figures2 {
public static void main(String[] args) { hexagon();
wanne();
stopSign();
hut();
} //main
...
Program Version 2, Fortsetzung
... public static void hexagon() {
System.out.println(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println();
}
public static void wanne() {
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println("+---+");
System.out.println();
}
Program Version 2, Fortsetzung
...
public static void stopSign() {
System.out.println(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
System.out.println("| STOP |");
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println();
}
public static void hut() {
System.out.println(" ______");
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
\ /
\______/
______
/ \ / \
Entwicklungsschritte
Version 3 (mit Ausnutzen der Struktur, ohne Redundanz)
n
Identifizieren Sie (eventuell vorhandene) Strukture(n) und Redundanz
n
Erstellen Sie Methoden um (soweit möglich) Redundanz zu vermeiden
n
Kommentieren Sie den Code
n
Führen Sie die Methode aus
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
Redundanz im Output
n
Hexagon oberer Teil: im Stop Schild und Hut wiederverwendet
n
Hexagon unterer Teil: in Wanne und Stop Schild
n
Trennlinie: in Wanne und Hut
n