252-0027
Einführung in die Programmierung
2.0 Einfache Java Programme
Thomas R. Gross
Department Informatik
ETH Zürich
Übersicht
§ 2.0 Einfache Java Programme
§ 2.1 Methoden
§ Struktur
§ 2.2 Typen und Variable
§ 2.2.1 Einführung
§ 2.2.2 Basistypen: Einfache (eingebaute) Typen
§ 2.2.3 Deklaration von Variablen
2.0 Einfache Java Programme
§ Übersicht
§ Struktur
§ Namen
§ Output
3
2.0 Einfache Java Programme
§ Sie sollten Übung 0 bis Mittwoch (29. 9.) 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
§ «Nachzügler» müssen eMail schicken (siehe Web Seite)
EBNF
§ Hält die Syntax Regeln von Java Programmen fest
§ Beispiel: Namen in Programmen
§ Bezeichner («identifier») müssen Anforderungen erfüllen
§ Bezeichner muss mindestens ein Zeichen lang sein
§ … muss mit Buchstaben anfangen (a-z, A-Z)
§ … kann Buchstaben oder Ziffern (0-9) enthalten
§ (Java erlaubt noch mehr) (Manchmal gibt es noch mehr Einschränkungen)
6
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 bezeichner ⟸ letter { letter | digit }
9
Java Programme
§ Erstellen
§ Ausführen
Java Programme
§ Ganzes Programm
§ Braucht: Compiler
§ Für jede Datei …
§ Erstellen
§ Übersetzen (Compilieren)
§ Ausführen
§ Modifizieren
11
§ Einzelne Anweisungen
§ Braucht: Shell
§ Für jede Anweisung …
§ Lesen (Read)
§ Evaluieren (Ausführen)
§ Ausgeben (Print)
§ REPL
Infrastruktur – Java Programme
Java Programme
§ Ganzes Programm
§ Braucht: Compiler
§ Für jede Datei …
§ Erstellen
§ Übersetzen (Compilieren)
§ Ausführen
§ Modifizieren
§ Eclipse IDE enthält alle Komponenten
§ «Industrial strength» integrierte Entwicklungsumgebung
14
Java und Eclipse
§ Viele Aspekte
§ Zuerst: Fokus auf das wichtigste
§ Sie kennen Java/Eclipse schon: super
§ Aber denken Sie an die, die noch nicht so weit sind
§ Schrittweise erklären wir mehr Konzepte
§ Was uns (jetzt) nicht interessiert: abdecken
17
19
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 …
21
§ class : Java Programm (nur 1 class/Datei fürs erste)
§ Name des Programms gleich Namen der Datei (!!)
24
Java Programm
javaprogram ⟸ public class bezeichner { method
}
Hier fehlt noch etwas!
Java Programm
javaprogram ⟸ public class bezeichner { methoddefinition
}
27
Java Programm
javaprogram ⟸ public class bezeichner { methoddefinition
} methoddefinition ⟸
public static void main ( String [] args ) { statementsequence
}
30
§ main: Java Methode (Java Code den wir ausführen können)
Aufreihung von Anweisungen: statementsequence
§ Viele mögliche Anweisungen («Statements»)
§ Zuweisungen
§ Schleifen
§ Input/Output
§ Methoden/Funktionen–Aufruf
§ Liste nicht vollständig
32
Aufreihung von Anweisungen: statementsequence
§ Viele mögliche Anweisungen (Statements)
§ Wichtig für Java (und viele anderen Programmiersprachen):
§ Methodenaufruf global bekannter Methoden
§ Format:
MethodenName ( ) ;
Aufreihung von Anweisungen: statementsequence
§ Viele mögliche Anweisungen (Statements)
§ Wichtig für Java (und viele anderen Programmiersprachen):
§ Methodenaufruf für ein Objekt (Beispiel folgt)
§ Format:
Objekt . MethodenName ( ) ;
34
Aufreihung von Anweisungen: statementsequence
§ Viele mögliche Anweisungen (Statements)
§ Wichtig für Java (und viele anderen Programmiersprachen):
§ Methodenaufruf
§ Format:
Objekt . MethodenName ( ) ;
Zuerst einmal nur ( )
– später mehr.
Mit dem Objekt System.out können wir mit der println() Methode Text ausgeben
System.out.println( );
Mehr über Text in ein paar Minuten -- es gibt viele Methoden für Textbearbeitung
jshell> "Hello".toUpperCase();
37
Objekt . MethodenName ( ) ;
"Hello" . toUpperCase();
Beispiel
§ Viele (Textbearbeitungs)Methoden lassen das Objekt mit dem die Methode arbeitet unverändert
39
§ println: Java Methode (Funktion)
42
§ println: Java Methode (Funktion)
§ Gibt String aus («druckt»)
§ String: Text zwischen " (Anführungszeichen, «quotation mark»,
«double quote») und " (beide " müssen oben sein)
Java Details
§ Wir werden einen Teil des Programmes (fürs erste) ignorieren
§ Aber wir können ihn nicht weglassen!
§ Sonst können wir das Java Programm nicht «übersetzen»
§ Übersetzen (kompilieren, «compile") heisst in eine Form bringen, die ausgeführt werden kann
§ Es gibt Fehlermeldungen wenn wir Teile weglassen oder falsch
schreiben
46
Java
§ Nicht alle Rückmeldungen des Übersetzers («compilers») sind so klar
48
50
Wir machen mal weiter ….
52
§ Leicht zu übersehen: die letzte } fehlt
54
Zusammenfassung
public class name {
public static void main(String[] args) { statement;
statement;
...
statement;
}
class: ein Programm mit Namen name
statement: Anweisung die method: Gruppe von
Anweisungen mit
Namen main
§ 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
56
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
Jede Methode braucht einen Namen
public static void main(String[] args) {…}
§ Konvention: fängt mit Kleinbuchstaben an
§ Konvention: Grossbuchstaben zur verbesserten Lesbarkeit
§ Beispiel: toUpperCase
§ Sonstige Bezeichner: Name für ein Programmelement
§ Muss mit einem Buchstaben (gross oder klein) anfangen
§ oder mit _ (Unterstrich, «underscore») oder mit «$» (Dollarzeichen)
§ Danach Ziffern oder obige Zeichen
§ Weitere Konventionen später
59Reservierte Symbole
§ keyword: Ein Bezeichner («identifier») der reserviert ist (weil er für die Sprache eine besondere Bedeutung hat)
abstract default if private this boolean do implements protected throw break double import public throws byte else instanceof return transient case extends int short try
catch final interface static var char finally long strictfp void
Reservierte Symbole
62
§ Reserviert für besondere Werte
false null true
Kommentare
Kommentare («comments») sind Notizen im Programmtext, die einem Leser beim Verstehen des Programmes helfen (sollen)
§ Leser: kann auch der Autor sein
§ Kommentare werden nicht ausgeführt, haben keinen Einfluss auf Programm
§ 2 Varianten
§ // Text bis zum Ende der Zeile
§ /* Text bis
§
Ein triviales Programm …
/*
* Einfaches Programm aus vielen Texten
* Author: Unbekannt
*/
public class HelloWorld { // nur eine Methode!
// mit einer Anweisung!!
public static void main(String[] args) { System.out.println("Hello World!");
} // Ende von main }
65
Strings
§ String: eine Folge von Zeichen («characters») eingeschlossen in " und "
§ "hello"
§ "Hello"
§ "3+2"
§ Einschränkungen:
§ Nur eine Zeile lang
"Das ist
kein Java String"
Sonderzeichen
§ Und was machen wir wenn wir ein " ausgeben wollen?
§ Es gibt sogenannte Ersatzdarstellungen («escape sequences») mit denen ein Sonderzeichen ausgedrückt werden kann
§ Fangen alle mit \ (Rückwärtsschrägstrich) («backslash») an
\t Tab character
\n Neue Zeile (new line character)
\" Quotation mark (double quote) character
\\ Backslash character
71
Beispiele
§ Beispiel:
System.out.println("\\Hallo\nWie\tgeht es \"Ihnen\"?\\\\");
§ Output:
Beispiele
§ Beispiel:
System.out.println("\\Hallo\nWie\tgeht es \"Ihnen\"?\\\\");
§ Output:
\Hallo
Wie geht es "Ihnen"?\\
74
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:
euer Spor Wagen
76
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
Department Informatik ETH Zürich
79
Übersicht
§ 2.0 Einfache Java Programme
§ 2.1 Methoden
§ Struktur
§ 2.2 Typen und Variable
§ 2.2.1 Einführung
§ 2.2.2 Basistypen: Einfache (eingebaute) Typen
§ 2.2.3 Deklaration von Variablen
Übersicht
public class name {
public static void main(String[] args) { statement;
statement;
...
statement;
} }
81
class: ein Programm mit Namen name
statement: Anweisung die ausgeführt werden soll
method: Gruppe von
Anweisungen mit
Namen main
Übersicht
public class name {
public static void main(String[] args) { statement;
statement;
...
statement;
}
class: ein Programm mit Namen name
Folge von Anweisungen: Rumpf method: Gruppe von
Anweisungen mit
Namen main
2.1 Methoden
§ Beispiel: main im Program HelloWorld
§ Eine Klasse kann mehrere Methoden enthalten.
83
Methoden
public class name {
public static void main(String[] args) { statement;
statement; ...
}
public static void helper() { statement;
statement; ...
method: Gruppe von
Anweisungen mit Namen main
method: Gruppe von
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
§ Mehrfache Ausführung, aber nur einmal im Programm(text)
§ Eine (neue) Methode stellt eine neue Anweisung zur Verfügung
86
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");
System.out.println("Warnung: sichern Sie die Daten\n");
System.out.println("\n---\n");
} // main
} 88
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
§ Festhalten des Algorithmus (auf- schreiben, codieren)
§ Ausführen (aufrufen, «call»,
«invoke») der Methode(n)
90
class
method main
n
statement
n
statement
n
statement
n
statement
n
statement
n
statement
n
statement
n
statement
n
statement
n
statement
Wie entstehen Methoden?
§ Entwickeln des Algorithmus
§ Lösung des Problems
§ Aufteilung in Teil-Probleme
§ Festhalten des Algorithmus (auf- schreiben, codieren)
§ Ausführen (aufrufen, «call»,
«invoke») der Methode(n)
class
method main
n
statement
n
statement
n
statement method one
n
statement
n
statement method two
n
statement
statement
(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");
} }
92
§ Entwickeln des Algorithmus
§ Lösung des Problems
§ Aufteilung in Teil-Probleme
§ Festhalten des Algorithmus (auf- schreiben, codieren)
§ Ausführen (aufrufen, «call»,
«invoke») der Methode(n)
class
method main
n
one
n
statement
n
two
method one
n
statement
n
statement method two
n
statement statement
Wie entstehen Methoden?
Methoden Definition (1. Approximation)
§ Zuerst definieren wir nur einfache Methoden
§ public static void name () {
§ statement(s); // Rumpf
§ }
§ Die Methode name kann überall aufgerufen werden ( public
static ) und gibt keinen Wert ( void ) zurück
§ Wir können uns vorstellen dass an der Stelle des Aufrufs der Rumpf (Body) der Methode ausgeführt (eingesetzt) wird.
94
Definition einer (static) Methode
methoddefinition ⟸
public static void main ( String [] args ) { statementsequence
} |
public static void name ( ) {
statementsequence
Aufruf einer Methode
§ Es gibt zwei Wege eine Methode aufzurufen
§ Mit explizitem Objekt: Objekt.methodName();
§ Beispiel: System.out.println("Text"); "Hello".toUpperCase();
§ Ohne Objekt
§ Geht nur für Methoden mit besonderen Eigenschaften
§ besondere Eigenschaften : static Keyword
§ static methods (Methoden mit Keyword static) werden ohne Objekt aufgerufen
§ Der Methodenname genügt
§ Beispiel:
printWarning();96
(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");
Aufruf einer (static) Methode
§ Syntax:
name();
§ Mehrfaches Aufrufen ist zulässig
methodinvocation ⟸ bezeichner ( ) ;
§ Beispiel:
printWarning();
printWarning();
98
Aufruf einer Methode (mit oder ohne Objekt)
§ 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.
Ausführung einer Methode
§ Methode name wird aufgerufen (d.h. name() )
§ 1. Anweisung von name ausgeführt
§ Gibt es weitere Anweisungen?
§ Nein: Ende der Ausführung von name
§ Ja:
§ Nächste Anweisung ausgeführt, weiter wie oben
§ Wir bezeichnen die Abfolge der Ausführung von Anweisungen als Kontrolfluss («control flow»)
§ geradliniger Kontrollfluss: die ausgeführten Anweisungen folgen im Programm aufeinander
§ In Java: Anweisungsreihenfolge ist explizit
100§ 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:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
104
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");
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:");
message1();
System.out.println("Ende von Nachricht 2");
} // message2 }
106
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");
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 }
108
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");
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 }
110
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");
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 }
112
2. 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");
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 }
114
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");
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 }
116
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");
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 }
Letzte Anweisung
118
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");
Output
§ Nachricht 1: Fertig
§ Die 2. Nachricht:
§ Nachricht 1: Fertig
§ Ende von Nachricht 2
§ Ende von "main"
120
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");
}
Kontrollfluss
Einfaches Beispiel
(Wir verwenden jetzt println weil es einfach ist. Spätere Java Programme benutzen eine andere Schnittstelle für Benutzer.)
122
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.
n
Führen Sie die Methode aus um den Output mit der gewünschten Figur zu vergleichen
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
\ /
\______/
______
/ \ / \
+---+ 124
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("| STOP |");
System.out.println("\\ /");
System.out.println(" \\______/");
System.out.println();
System.out.println(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
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 gewünschten Figur zu vergleichen
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
\ /
\______/
______
/ \ / \ +---+
126
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
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| STOP |
\ /
\______/
Program Version 2
public class Figures2 {
public static void main(String[] args) { hexagon();
wanne();
stopSign();
hut();
} //main
...
128
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(" \\______/");
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(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
System.out.println("+---+");
}
} //Figures2 130
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| 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
132
______
/ \ / \
\ /
\______/
\ /
\______/
+---+
______
/ \ / \
| 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
Diese Redundanz kann durch diese Methoden ausgenutzt (d.h. eliminiert) werden:
n
hexagonTop
n
hexagonBottom
n
line
Program Version 3
// Ihr Name, 252-0027, Herbst 2020
// Prints several figures, with methods for structure and redundancy.
public class Figures3 {
public static void main(String[] args) { hexagon();
wanne();
stopSign();
hut();
}
// Draws the top half of an an hexagon.
public static void hexagonTop() { System.out.println(" ______");
System.out.println(" / \\");
System.out.println("/ \\");
Program Version 3, Fortsetzung
...
// Draws the bottom half of an hexagon.
public static void hexagonBottom() { System.out.println("\\ /");
System.out.println(" \\______/");
}
// Draws a complete hexagon.
public static void hexagon() { hexagonTop();
hexagonBottom();
System.out.println();
} ...
135
Program Version 3, Fortsetzung
...
// Draws a tub («Wanne») figure.
public static void wanne() { hexagonBottom();
line();
System.out.println();
}
// Draws a stop sign figure.
public static void stopSign() { hexagonTop();
System.out.println("| STOP |");
hexagonBottom();
Program Version 3, Fortsetzung
...
// Draws a figure that looks sort of like a hat («Hut»).
public static void hut() { hexagonTop();
line();
}
// Draws a line of dashes.
public static void line() {
System.out.println("+---+");
}
} //Figures3
137
Methoden (Übung)
Schreiben Sie ein Programm das diese Rackete ausgibt:
/\
/ \
/ \
/ \
+---+
| |
| |
| |
+---+
| |
| ISS |
| |
+---+
| |
| |
| |
+---+
2.2 Typen und Variable
140
Übersicht
§ 2.0 Einfache Java Programme
§ 2.1 Methoden
§ Struktur
§ 2.2 Typen und Variable
§ 2.2.1 Einführung
§ 2.2.2 Basistypen: Einfache (eingebaute) Typen
§ 2.2.3 Deklaration von Variablen
2.2.1 Einführung
142