Imperative Programmierung

Werbung
Grundlagen der Informatik
Bachelor of Arts: Sprache, Kultur, Translation
Teil 1 : Grundlagen, Historie und imperative Programmierung
Stephan Mechler
1. Vorlesung
25.10.2010
Übersicht
Einführung
Einführung in die Programmierung
▪
▪
▪
▪
▪
Was Ist Informatik
♦
♦
♦
♦
♦
Was ist ein Computer?
Was Ist Information?
Felder der Informatik
Betriebssysteme
Programmiersprachen
Java Einführung
♦
♦
♦
♦
♦
Java Beispiel
Eclipse
IDE
Algorithmen
Programmentwurf
Java Sprachaufbau
♦
♦
♦
♦
♦
♦
Datentypen
Java Struktur
Variablen und Konstanten
Zuweisungen
Bedingungen: if
Schleifen
Java Beispiel: Celsius
Kommentare
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme →
2
Übersicht
Was ist Informatik?
▪
▪
Informatik
♦ Englisch: Computer Science, Wissenschaft vom
Computer
Was ist ein Computer?
♦ ...mehr dazu in Kapitel 3
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme →
3
Rechnerarchitektur - I
Pascaline (1642 )
Soroban ~ 1600
Mac
MAC
IBM-Thinkpad
Resulta BS 7
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
4
Rechnerarchitektur - I
Schema:
Prozessor
Speicher
Controller/Bus
Bus
Peripherie
VNA:
ALU + Steuereinheit
Speicherwerk
Eingabe-/Ausgabewerk
PC (schematisch):
RAM +Northbridge
FSB
CPU
Southbridgbe
PCI/PCIe
•Karten
•Steckplätze
•Interne Karten
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
5
Rechnerarchitektur - I
PC (Stand 2004):
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
6
Elementare Begriffe - 1
Was ist der Unterschied
zwischen Daten und Information?
♦ Daten = physikalische Zustände + ihre Interpretation
♦ Information = Daten + ihre Bedeutung
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen
7
Elementare Begriffe – 2
Beispiel:
0010
1001
Speicherzustand
Interpretation
2
9
Daten
Bedeutung
29 °C
Information
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen
8
Elementare Begriffe – 1
Informatik(IT) und
Elektronische Datenverarbeitung (EDV)
▪
▪
Informatik bezeichnet die Wissenschaft von der
systematischen Verarbeitung von Informationen,
insbesondere der automatischen Verarbeitung mit Hilfe
von Rechenanlagen.
Die Elektronische Datenverarbeitung ist der
Sammelbegriff für die Erfassung und Manipulation von
Daten durch Computer.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
9
Elementare Begriffe – 3
▪
▪
▪
Daten- (oder Informations-) Verarbeitung
♦ Verknüpfung und Transformation von Daten nach
bestimmten Vorschriften
♦ EVA-Prinzip: Eingabe-Verarbeitung-Ausgabe
♦ Diese Vorschriften nennt man Algorithmen
Informatik: (im engeren Sinne) Wissenschaft von der
elektronischen Datenverarbeitung (EDV), also mittels
Computer
Datenverarbeitung wird benutzt, um Probleme der realen
Welt zu lösen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
10
Teildisziplinen
Angewandte Informatik/Realisierung
Technische Informatik
Praktische Informatik
Theoretische Informatik
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
11
Theoretische Informatik
Theoretische Grundlagen der Informatik
♦
♦
♦
♦
♦
♦
♦
Theorie formaler Sprachen
Automatentheorie
Berechenbarkeits- und Komplexitätstheorie
Graphentheorie
Kryptologie
Logik (u. a. Aussagenlogik und Prädikatenlogik),
formaler Semantik
Grundlagen für den Bau von Compilern von Programmiersprachen und
die mathematische Formalisierung von Problemstellungen. Sie ist somit
das formale Rückrat der Informatik.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
12
Technische Informatik
Hardwareseitigen Grundlagen der Informatik
♦
Rechnerarchitektur
● Mikroprozessor
● Speicher
● Controller
● Peripherie
♦
Rechnerkommunikation
● Verteilten Systeme
● Grid-Computing
● Middleware
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
13
Praktische Informatik
▪
▪
Entwicklung von Softwarekomponenten
♦ Elemente von Computerprogrammen (Datentypen,
Datenstrukturen, Algorithmen)
♦ Softwaretechnologie (auch: SW-Engineering oder
Programmiertechnik)
♦ Programmierverfahren (funktional,
objektorientiert etc.)
Systemsoftware
♦ Betriebssysteme
♦ Software-Entwicklungsumgebungen (Compiler,
Debugger etc.)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
14
Angewandte Informatik
▪
▪
Allgemeine Anwendungen
♦ Datenbanksysteme
♦ Informationssysteme
♦ Künstliche Intelligenz
♦ Computergrafik
♦ Bildverarbeitung
♦ Multimediasysteme
♦ Simulation
Spezielle Anwendungsgebiete
♦ Wirtschaftsinformatik
♦ Medizinische Informatik
♦ Technische Informations- und Steuerungssysteme (z.B.
Robotik)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
15
Bereiche
▪
▪
▪
Grundlagen
(Formalwissenschaften: Mathematik, Natur-,
Wirtschafts- und Ingenieurwissenschaften aber
auch Linguistik oder Erkenntnistheorie)
Informationssysteme und ihre Entwicklung
Anwendung der Informatik
(Medizin, Telekommunikation, Biotechnologie,
Geschäfts- und Produktionsprozesse etc.)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
16
Betriebssysteme
▪
Was ist ein Betriebssystem:
♦ Software, die den Betrieb des Computers
ermöglicht.
♦ Verwaltet Betriebsmittel wie Speicher, Einund Ausgabegeräte
♦ steuert die Ausführung von Programmen.
▪
Englisch operating system (OS)
▪
...mehr dazu später
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung → Java Beispiel
17
Programmiersprachen
▪
▪
▪
Was ist ein Programmiersprache:
♦ formale Sprache zur Erstellung von
Verarbeitungsanweisungen
♦ Lesbar und verständlich für den Menschen
lesbare Beschreibung heißt Quelltext
Quelltext wird zur Abarbeitung in
Maschinensprache überführt
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Betriebssysteme→ Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE
18
AUSBLICK
▪
▪
Java „Crash-Kurs“
Elementare Begriffe der Programmierung
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
19
??? Fragen
Welche
Fragen
haben Sie?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
20
Zusammenhang der Programmiersprachen
1957
1960
1965
1970
Fortran I
Lisp
Cobol
Algol-W
Pascal
Algol 60
PL/I
Algol 68
C
Fortran IV
Basic
Simula 67
BCPL
1975
Fortran 77
Smalltalk 80
1980
Common Ada Modula-2
1985 Lisp
C++
ObjectPascal
CLOS
Ansi-C
Delphi
1990
Fortran 90
Oberon-2
Java
1995
Fortran 95
Ada 95
2000
Fortran 2003*
C# / .net
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
21
Was Ihnen keiner erzählt …
Java ist mit
132.186 km2 die
zweitgrößte
Insel Sumatras
Hauptstadt
Jakarta
100 Vulkane
Viele
Bodenschätze
… und
Kaffeanbau
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
22
Geschichtliches
▪
▪
▪
▪
▪
▪
▪
▪
▪
Java gibt es seit 1991 – ursprünglich: Oak
Sun Microsystems - J. Gosling
gedacht zur Steuerung von
Haushaltsgeräten und in der
Unterhaltungselektronik (Star Seven)
1994: Internet-Boom 1994 → Java,
HotJava
1995: Netscape-Navigator 2.0
JavaSoft, http://java.sun.com
1995: Java Version 1.0; 1996: Version 1.1
1998: Version 1.2, Java 2, SE – ME – EE
heute 1.4.x – Version 5.0 (Tiger Edition)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
23
JETZT
Die erste Tasse
Java
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
24
Kommandozeile – 1
▪
▪
▪
▪
MS DOS-Eingabeaufforderung starten
Start – Alle Programme – Zubehör –Eingabeaufforderung
z:\
Unterverzeichnis anlegen
md javueb1
In das Unterverzeichnis wechseln
cd javueb1
Editor starten
notepad Hello.java
Neue Datei anlegen? – Ja
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
25
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
26
Kommandozeile – 2
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
27
Kommandozeile – 3
▪
▪
▪
▪
Datei speichern
(Prüfen Sie, ob Sie im Verzeichnis javueb1 speichern)
Datei umbenennen
(nur dann notwendig, wenn Sie den Editor ohne den Dateinamen als
Parameter aufgerufen hatten)
ren Hello.java.txt Hello.java
Compilieren
cd c:\programme\java\jdk1.6.0_14\bin
c:javac z:\javueb1\Hello.java
(… bitte warten  …)
Ausführen
java Hello
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
28
Kommandozeile – 4
▪
▪
▪
Funktioniert nicht? → Editor, kontrollieren
Java unterscheidet Groß-/Kleinschreibung!
Probieren Sie: java heLLo
Ein paar typische Fehler werden in der Übung
noch ausführlich besprochen …
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
29
Kommandozeile – 5
▪
▪
▪
Java Quellcode
Compiler
Java Bytecode
▪
Virtuelle Maschine
Laden,
Verifizieren,
Interpretieren
Prozessor
Java-Programme liegen
in Form von so
genannten Klassen vor.
Ein Programm kann aus
mehreren Klassen
bestehen.
Eine Klasse wird als
Start-Programmteil
festgelegt.
(Kommt später)
Wir werden zunächst nur
mit Programmen
arbeiten, die aus einer
einzelnen Klasse
bestehen.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
30
Achtung!
Die erste Tasse Java
und
ganz viel Neues
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
31
Merke!
Eine Klasse = Eine Datei
Name Klasse = Name .java Datei
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
32
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
33
Nachbetrachtung!
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
public, class, static, void, String
= Schlüsselwörter
Schlüsselwörter = Feststehende Begriffe der Sprache
(feststehender Token / Lexik -> Grammatik)
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
34
Nachbetrachtung!
public class Hello {
class Hello {
class = Eine Klasse wird class „Name“
{ definiert.
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
35
Nachbetrachtung!
public class Hello {
public = Zugriffsattribut
Zugriffsattribute legen fest, ob und wie
andere Klassen auf die eigene Klasse
zugreifen können
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
36
Nachbetrachtung!
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
main = Wenn eine Application
gestartet wird, wird automatisch die
Funktion main() aufgerufen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
37
Nachbetrachtung!
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
System.out.println:
System ermöglicht Zugriff auf StandardFunktionen des Computer-Systems
Objekt out verwaltet Standardausgabe
Daten, in “...“ zwischen () an println() übergeben
werden, werden auf den Monitor - ausgegeben.
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
38
Nachbetrachtung!
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
Verwaltung
Anweisungen = Eingabe/Verarbeitung/Ausgabe
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
39
Nachbetrachtung!
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
{ } = Kapselung von
Anweisungs- und Definitionsblöcken
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
40
Nachbetrachtung!
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
;
Jede Anweisung wird mit ; abgeschlossen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
41
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
42
Eclipse – 1
▪
▪
▪
Eclipse starten
Start – Alle Programme – Eclipse 3.x – Eclipse
(… Bitte warten  bis zu 2 Minuten …)
Select a workspace – z:\inf1\workspace – Checkhaken bei Use
this as default – Ok
Startbildschirm: Der Pfeil rechts oben führt Sie zur Oberfläche. Falls
Sie irgendwann zum Startbildschirm zurückkehren wollen: Help –
Welcome
Anlegen eines neuen Java Projektes
♦ File – New – Project…
♦ New Project: Wizards – Java Project – Next
♦ Eingabe eines Projektnamens, dann Finish
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
43
Eclipse – 2
▪
▪
▪
Anlegen einer Java Klasse
♦ Rechte Maustaste auf dem Projekt, New – Class
♦ Im Name field einen gültigen Klassennamen
eingeben
♦ Checkhaken bei public static main (Strings[] args)
♦ Finish
In der Methode main folgendes eingeben:
System.out.println("Hallo Mannheim!");
Speichern mit STRG-S
Dabei wird automatisch compiliert!
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
44
Eclipse – 3
Für Ihre ersten Schritte werden Sie
ausschließlich zwischen diesen
beiden, automatisch generierten,
Klammern programmieren.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
45
Eclipse – 4
▪
▪
▪
▪
▪
Run – Run As – Java-Application
Im Fenster unten rechts in den Reiter Console
umschalten
Run in der Toolbuttonleiste zur wiederholten
Ausführung oder [STRG]-[F11]
Aufpassen bei Projektwechsel! Der Button in der
Toolbuttonleiste startet noch das "alte" Projekt.
Weiteres zum Umgang mit Eclipse folgt …
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
46
Eclipse – 5
Weitere Informationen unter:
▪
▪
▪
▪
Pflicht !
Eclipse FAQ
http://www.eclipse.org/eclipse/faq/eclipse-faq.html
Eclipse Dokumentation
http://www.eclipse.org/documentation/main.html
Sehr guter Einführungsartikel in Eclipse, u.a. mit Pflicht !
weiterführenden Informationen zum Debugging etc.
http://www.onjava.com/pub/a/onjava/2002/12/
11/eclipse.html?page=1
B. Daum: Java-Entwicklung mit Eclipse 3; dpunkt;
ISBN 389864281X; 44,00 €
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
47
Eclipse
Eclipse = IDE
IDE = Integrierte Entwicklungsumgebung. Ein
Anwendungsprogramm zur Entwicklung von
Software. (engl. Integrated Development
Environment)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
48
IDE
IDE
▪
▪
▪
▪
▪
Texteditor
Compiler bzw. Interpreter
Linker
Debugger
Quelltextformatierungsfunktion
Meist wird nur eine Programmiersprache unterstützt.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen
49
Vorteile von Eclipse
▪
▪
▪
▪
Vereinfachte Projektabwicklung
Fehler werden gleich angezeigt
Inkrementeller Compiler
Eingebauter Debugger
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen
50
Hilfe in Eclipse
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
51
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen
52
Das zweite Beispiel – 1
import java.io.*;
import java.util.*;
public class Celsius {
public static void main(String[ ] args) throws
IOException {
// Benötigte Variablen deklarieren
String eingabeZeile;
double c = 0.0;
double f ;
// möglich ist auch: double c=0.0, f;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
53
Das zweite Beispiel – 2
// Für die Eingabe von der Tastatur
BufferedReader eingabe = new BufferedReader(new
InputStreamReader(System.in));
// Berechnungsschleife
do {
// Anleitungausgeben
System.out.println(
"Programm endet durch Eingabe von 0");
System.out.println("Eingabe der Celsius-Temperatur: ");
// Eingabe, Double-Wert einlesen
eingabeZeile = eingabe.readLine();
c = Double.parseDouble(eingabeZeile);
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
54
Das zweite Beispiel – 3
// Umrechnen in Fahrenheit
f = c * 9.0/5.0 + 32.0;
// Ausgabe des Ergebnis
System.out.println("... in Fahrenheit: " + f + "
Grad \n");
// Schleife durch Eingabe von 0 verlassen?
} while ( Math.abs(c)
> 0 );
System.out.println("... und tschüss");
}
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
55
Wichtig!
Neues?
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
56
Schlüsselwort import
import java.io.*;
import java.util.*;
Mit import werden “Hilfsmittel” aus “Paketen” ins Programm
importiert.
java.io und java.util sind Paketnamen.
Das Sternchen "*" steht für alle “Hilfsmittel” in diesem Paket.
(mehr dazu in späteren Folien...)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
57
Schlüsselwort throws
public static void main(String[ ] args) throws IOException {
Kann eine methode einen bestimmten Fehler erzeugen muss dieser
mit dem Schlüsselwort throws gekennzeichnet werden
(mehr dazu in späteren Folien...)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
58
Schlüsselwort do
do {
...
} while (Math.abs(c) > 0 );
Eine Wiederholung: Schleife
“Mache solange Bedingung erfüllt“
(mehr dazu in späteren Folien...)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
59
Variablen & Datentypen
String eingabeZeile;
double c = 0.0;
String, double = Datentypen
eingabeZeile, c = Variablen
Man muss eine Variable definieren!
Mann definiert Sie in dem man ihren Datentyp (bzw. Wert) festlegt.
Der Datentyp gibt den “Wertebereich” vor.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
60
Variablen & Datentypen
Beispiel Wertebereichs
double:
64-bit Gleitpunktzahl Primitive
Wertebereich :
±1.79769313486231570 E+308 und ±4.94065645841246544 E-324
63 Bit
Bit 0
52 Bit
.........
Exponent (e)
Vorzeichen (v)
Mantisse (1+m)
(mehr dazu in späteren Folien...)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
61
Eingabe über Tastatur
// Für die Eingabe von der Tastatur
BufferedReader eingabe = new BufferedReader(new
InputStreamReader(System.in));
..
eingabeZeile = eingabe.readLine();
(mehr dazu in späteren Folien...)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
62
Eine Berechnung
// Umrechnen in Fahrenheit
f = c * 9.0/5.0 + 32.0;
Speichere in der Variable f das Ergebnis aus Inhalt der Variablen c
mal Neun geteilt durch Fünf plus Zweiunddreißig
(mehr dazu in späteren Folien...)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
63
Wichtig!
Kommentare
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
64
Kommentaren mit //
Kommentare mit // enden am Zeilenende
Beispiele
Kommentar
am Zeilenende
f = c * 9.0/5.0 + 32.0; // Umrechnen in Fahrenheit
// Ausgabe des Ergebnis
System.out.println("... in Fahrenheit: " + f + " Grad \n");
...
Kommentarzeile
Bei jeder Code-Änderung in
diesem Bereich müssen die
Kommentare ständig umformatiert
werden, um "schön" auszusehen
Negativ-Beispiele
f = 0;
max = 10;
mid = min + (max – min) / 2;
i = i + 1;
// Hier wird f auf 0 gesetzt
// Maximalwert festlegen
// Mitte berechnen
// die Variable i wird um 1 erhöht
Trivialkommentar: Das sieht man ohne Kommentar
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
65
Kommentaren mit /* */
Blockkommentare beginnen mit /* und enden mit */
Diese Kommentare können sich über mehrere Zeilen erstrecken
/* Beginn des Blocks
Beispiel
/**
* Hauptroutine zur Ausgabe von Hallo Mannheim
*
*/
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
/* Ende des Blocks
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
66
Kommentare - Warum?
Kommentare dienen hauptsächlich der Dokumentation von
Programmen
damit sie auch Personen, die nicht an der
Programmierung beteiligt waren, verstehen können
und
damit derjenige, der sie programmiert hat, sie besser
nachvollziehen, erklären und bei Bedarf ändern kann,
wenn er sich einige Zeit nicht mit ihnen beschäftigt hat
60 – 70% aller Entwicklungsarbeiten sind Wartung und
Weiterentwicklung!
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
67
Das zweite Beispiel – 4
▪
▪
Download unter
http://www.informatik.fh-mannheim.de/~mechler/
Unter Eclipse ein Projekt anlegen, markieren und dann
♦ Importieren über File – Import …
FileSystem – Directory auswählen – auf der rechten
Seite vor Celsius Java einen Checkhaken setzten –
Import
(dabei muss vorher der entsprechende Projektname
im Package Explorer, linkes Fenster, markiert sein!)
♦ oder (Windows) Drag'n'Drop der .java Datei auf das
Projekt Icon in Eclipse
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
68
Weiteres Beispiel – 4
▪
▪
▪
Download unter
http://www.informatik.fh-mannheim.de/~mechler/
Summe.java
Neu hier:
StringTokenizer t = new StringTokenizer(eingabeZeile,"+");
Zerteilt einen Text am „+“
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
69
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
70
JETZT!
Programmentwurf
Programmentwurf
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
71
Können Sie das lesen?
Nach eienr Stidue der Cmabridge Uinverstiät, ist es
eagl in wlehcer Reiehnfogle die Bchustebaen in
Wöretrn vokrmomen. Es ist nur withcig, dsas der
ertse und lettze Bchusatbe an der ricthgien Stlele
snid. Der Rset knan total falcsh sein und man knan
es onhe Porbelme leesn. Das ist so, wiel das
mneschilche Geihrn nciht jeden Bchustbaen liset
sodnern das Wrot als gaznes.
Krsas oedr?
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
72
Programm
▪
▪
▪
Folge von Befehlen (Arbeitspeicher)
Selbstständiges Erfüllen von Aufgaben
Serielle Abarbeitung
Allgemein ein in einer Programmiersprache formulierte
Vorschrift mitsamt den zugehörigen Datenbereichen
Programm → konkret. Es ist im exakt definierten und
eindeutigen Formalismus einer Programmiersprache
verfasst, nimmt Bezug auf bestimmte Darstellungen der
verwendeten Daten und ist auf einer Rechenanlage
ausführbar
Häufig auch Teillösungen (Unterprogramme etc.) beiläufig
als Programm bezeichnet
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
73
Ein Ablaufplan
ja
nein
Funktioniert
der PC?
Bloß nicht
mehr dran
rumbasteln?
Hat's jemand
gemerkt?
Hast du dran
rumgespielt?
ja
Oh NEIN!
nein
nein
ja
Unauffällig pfeifen und
verschwinden
ja
Wird dich jemand
verantworlich
machen?
Große KATASTROPHE!!!
nein
ja
nein
Kannst du jemand die Schuld
zuschieben?
Kümmere dich nicht drum!
ja
ALLES KLAR!
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
74
Test!
▪
▪
▪
▪
Start des Programms
Speicher unter dem
Variablennamen i den
Wert 1
Ergebnis:
1
2
3
Gebe solange den Wert
von i aus, bis i einen Wert
größer als 100 inne hat.
Prüfe jedoch vorher, ob i
den Wert 39 erreicht,
speichere dann den Wert
61 unter dem
Variablennamen i.
...
Beende das Programm
100
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
38
39
61
62
...
75
Struktogramme – 1
▪
▪
▪
▪
1973 eingeführt von I. Nassi und B.
Shneiderman als Darstellungsmittel für
Algorithmen
11 Symbole + Erweiterungen
DIN 66261
B etragPruefen
Beispiel:
Eingabe a
Eingabe b
a>b?
ja
nein
Ausgabe a
Ausgabe b
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
76
Struktogramm – 2
▪
▪
▪
▪
grafische Darstellung in Form eines
geschlossenen Blocks
logische Unterstrukturen werden in Unterblöcke
unterteilt
verschiedene Symbole für verschiedene
Operationsarten
Betrachtung von oben nach unten (top-down)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
77
Struktogramm – 3
Prozess
▪▪
▪
Verarbeitung, Prozess
Rahmen
enthält die weiteren Operationen wie z.B.
♦ Zuweisungen
♦ Ein-/Ausgabebefehle
♦ Unterprogrammaufrufe etc.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
78
Struktogramm – 4
Anweisung
▪
weiteren Operationen wie z.B.
♦ Zuweisungen
♦ Ein-/Ausgabebefehle
♦ Unterprogrammaufrufe etc.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
79
Struktogramm – 5
Anweisung 1
Anweisung 2
Anweisung 3
▪
▪
Folge, Sequenz
Mehrere Arbeitsschritte werden durch Folge von
Strukturblöcken dargestellt
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
80
Struktogramm – 6
Bedingung
ja
nein
Strukturblock 1
Strukturblock 2
Alternative, Verzweigung
Stellen einer Bedingung
erfüllt → weiter bei Strukturblock 1
nicht erfüllt → weiter bei Strukturblock 2
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
81
Struktogramm – 7
Auswahl
1
Strukturblock 1
2
Strukturblock 2
sonst
Alternativblock
Fallauswahl, Mehrfachverzweigung
Treffen einer Auswahl (z.B. Wert einer Integervariable)
jeweils erfüllt → weiter bei jeweiligem Strukturblock
nicht erfüllt → weiter bei Alternativblock
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
82
Struktogramm – 8
Wiederholen, solange
Eingangsbedingung gilt
Strukturblock 1
Strukturblock 1
Wiederholen, solange
Bedingung gilt
Wiederholung, Schleife
Anweisungsblock im Strukturblock wird solange
wiederholt, solange die Bedingung erfüllt ist
Kopfgesteuerte, abweisende Schleife
Fußgesteuerte, annehmende Schleife
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
83
Struktogramm – 9
Unterprogrammaufruf
(oder ausgegliederter
Strukturblock)
Aufruf
Unterprogrammaufruf, Funktion, Prozedur
aber auch "wenn der Platz nicht reicht"
in dem Fall aber besonders kennzeichnen
Struktogramme passen auf DIN A4
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
84
Struktogramm – 10
Zielort
für Aussprung
Aussprung
Beendigung eines Programmteils
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
85
Struktogramm – Übung
Ziel:
Ausgabe der Zahlenreihe:
1
2
3
4
5
6
7
8
9
10
Variante I
Variante II
i=0
i=1
i = i +1
Ausgabe i
Ausgabe i
i = i +1
i < 10
STRUKT2
i < 11
i=1
Ausgabe i
i = i +1
Variante III
i=0
Ausgabe i
i < 10
i < 10
Variante IV
i=1
i < 11
i = i +1
Ausgabe i
Ausgabe i
i=i+1
.....viele Wege führen zum Ziel
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
86
StruktEd
StruktEd
www.strukted.de
Drag'n'Drop
Sehr gute OnlineHilfe
Ausdruck
oder:
[STRG] + G
Achtung! Drucker
muss installiert sein!
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
87
Info!
♦♦ Dafür
Dafürsorgen,
sorgen,dass
dassfür
fürdie
dieÜbungen
Übungenalles
alles
funktioniert
funktioniert
♦♦ Eclipse
Eclipseinstallieren;
installieren;zuerst
zuerstJava
Java6.0,
6.0,dann
dannEclipse
Eclipse
♦♦ Rechtzeitig:
Rechtzeitig:Folien,
Folien,Übung
Übung
♦♦ Literatur
Literatur
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
88
??? Fragen
Welche
Welche
Entwurfsmethoden
Entwurfsmethoden
kennen
kennen Sie
Sie noch?
noch?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
89
Weitere Methoden – 1
▪
Programmablaufplan, PAP
♦ Flussdiagramm oder
♦ Ablaufdiagramm etc.
♦ DIN 66001
♦ durch Pfeile (Strukturlaufrichtung)
♦ verbundene Symbole
Start
Eingabe a
Eingabe b
Ja
a>b?
Ausgabe a
Nein
Ausgabe b
Ende
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
90
Weitere Methoden – 2
▪
Pseudocode
♦ Pascal-ähnliche Notation:
begin BetragPruefen
Eingabe(a);
Eingabe(b);
if a > b then
Ausgabe(a);
else
Ausgabe(b);
end if
end BetragPruefen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
91
Weitere Methoden – 3
▪
▪
▪
▪
UML Ist:
♦
♦
Objekt-orientierte (Design-)Methode
♦
Beschreibung sowohl von Software als auch von
Geschäftsprozessen.
Quasi-Standard bei der objektorientierten SoftwareEntwicklung.
UML Ziele:
♦
♦
♦
objektorientierte Modellierung von Systemen
Verknüpfung von Analyse und Entwurf
spezielle Anforderungen bei Entwicklung komplexer Systeme
Vielzahl graphischer Darstellungstechniken
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
92
Weitere Methoden – 4
▪
▪
OOD (Object Oriented Design, Vorgänger von UML)
Jackson- oder Warnier-Orr-Diagramm (8 Basisblöcke)
▪
Entscheidungstabellen
▪
Weitere Strukturdiagramme
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
93
Beispiel – 1
U m r e c h n u n g C e ls iu s F a h r e n h e
E in g a b e C e ls iu s
F a h r e n h e it = C e ls iu s * 9 /5 + 3 2
A u s g a b e F a h r e n h e it
s o la n g e C e ls iu s u n g le ic h 0
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
94
Beispiel – 2
Geldautomat
Beginn
solange Geldautomat bereit
Geldkarte einführen
Anzahl Fehlversuche lesen
Geldkarte lesbar &
Anzahl Fehlversuche < 3
ja
nein
PIN eingeben
PIN ok ?
ja
nein
Anzahl Fehlversuche
Anzahl Fehlversuche
auf 0 setzen
um 1 erhöhen
Geldkarte einziehen
Geldbetrag wählen
Geldkarte entnehmen
Geldkarte entnehmen
Geld entnehmen
Ende
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
95
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
96
JETZT
Algorithmen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
97
Algorithmus
Begriff:
Ein Algorithmus ist ein Verfahren mit einer
♦ präzisen (d.h. in einer genau festgelegten
Sprache formulierten)
♦ endlichen Beschreibung unter Verwendung
♦ effektiver (d.h. tatsächlich ausführbarer)
♦ elementarer Verarbeitungsschritte
Zu jedem Zeitpunkt der Abarbeitung des
Algorithmus benötigt dieser nur endlich viele
Ressourcen
▪
▪
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
98
Historie
▪
▪
▪
Muhammad ibn Musa al-Chwarazmi (* ca. 783; † ca. 850)
Buch: Über das Rechnen mit indischen Ziffern (um 825)
Erster Computeralgorithmus
(1842 von Ada Lovelace,
Notizen zu Charles Babbages Analytical Engine)
Turingmaschinen und Algorithmusbegriff (Alan Turing 1936)
„Berechnungsvorschriften zur Lösung eines Problems heißen genau dann
Algorithmus, wenn eine zu dieser Berechnungsvorschrift äquivalente
Turingmaschine existiert, die für jede Eingabe, die eine Lösung besitzt, stoppt“
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
99
Kochbuch
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
100
Kochbuch
Wie koche ich mir (m)einen
Algorithmus?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
101
Entwurf
Der Entwurf von Algorithmen ist
ein kreativer Prozess, der nicht
automatisiert werden kann.
▪
▪
unabhängig Programmiersprachen
unabhängig von der Rechner-Hardware
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
102
Beispiel
Aufgabe: Summiere alle
Zahlen zwischen 1 und 100
Lösung:
1+2+3+4+...+99+100 = 5050
Lösung:
1+100 + 2+99 + 3+98 + .... + 50 + 51 = 50 * 101 = 5050
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
103
Algorithmus
definierte Handlungsvorschrift
zur Lösung eines Problems
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
104
Abgrenzung
Heuristik (griech.: Kunst des
Findens bzw. Erfindens).
Informatik: geschickte Lösung
mit wenig Aufwand
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
105
Korrektheit
▪
▪
Ist das Problem lösbar?
Welche Schritte müssen ausgeführt werden, um
einen korrekten Algorithmus zu erhalten?
Korrekt heißt:
♦ Der Algorithmus erzeugt ein Resultat
(ist endlich).
♦ Das Resultat ist das gesuchte.
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
106
Weitere Forderungen
▪
▪
▪
▪
▪
▪
▪
Effizienz
Benutzerfreundlichkeit
Flexibilität
Robustheit/Stabilität
Lesbarkeit
Wiederverwendbarkeit
...
Diese Forderungen sind optional - aber wichtig !
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
107
Los geht's: Kochen
Zutaten
Kochwerkzeug
Grundrezepte
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
108
Resultate
Wie erreiche ich beim
Kochen ein (gutes)
Resultat:
▪
▪
▪
(Aus)probieren
Erfahrung
Rezept
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
109
Analogie
Algorithmus → Rezept
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
110
Nachgefragt?
Wie komme ich beim Kochen
zu einem Rezept?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
111
Nachgefragt?
Wie erhalte ich ein Rezept:
▪
▪
▪
▪
Kaufen (Kochbuch)
Ausprobieren
Erfahrung
Verfeinern
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
112
Beispiel
Rezept:
Spaghetti
▪
▪
▪
▪
▪
Koche Wasser
Gebe Salz und Öl zu
Gebe Spaghetti hinzu
Warte 10 min
Prüfe ob Spaghetti
weich, ansonsten warte
1 min
Algorithmus:
Summiere Zahlen bis 100
▪
▪
▪
▪
Setzte Summe auf 0 und
die Zahl i auf 1
Addiere die Zahl i auf die
Summe und erhöhe i um 1
Wiederhole obigen Schritt
100 mal
Gib das Ergebnis aus
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
113
bevor ich koche
▪
▪
Bevor ich koche:
♦ Was will ich kochen?
♦ Für wen?
♦ Wieviel?
♦ Was habe ich zur Verfügung?
♦ usw.
Algorithmus:
♦ Spezifikation der Problemstellung (Soll/Ist)
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
114
Check!
▪
▪
Kochen:
♦ Resultat genießbar
♦ Resultat war das gewünschte?
♦ Kostengünstig gekocht, schnell?
● Falls nicht: Rezept überdenken
Algorithmus:
♦ Resultat erhalten (lösbar)
♦ Resultat entspricht Spezifikation
♦ Algorithmus effizient?
● Falls nicht: Algorithmus beschleunigen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
115
Spiegelei...
▪
▪
▪
Eier aufschlagen
In die Pfanne
warten
straightforward
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
116
Große Menüs
Gebeizter Lachs mit Kräutersahne
Blattsalat und Kartoffelpuffer
***
Knusprige Ente
mit Blaukraut und Reibeknödel
***
Lebkuchenmousse mit Mandarinensorbet
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
117
Zerlegung: Menü
▪ Gebeizter Lachs mit Kräutersahne
♦
Lachs beizen
● Lachs ausnehmen, ... usw., usw.
♦
Kräutersahne herstellen
● Kräuter waschen, ... usw., usw.
▪ Blattsalat und Kartoffelpuffer
♦
Blattsalat herstellen
● Waschen, ... usw., usw.
♦
Kartoffelpuffer, ... usw., usw.
▪ Knusprige Ente
....
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
118
Dessert - Descartes
Maxime "Regeln zur Leitung des Geistes" (Descartes franz. Philosoph und
Mathematiker, 1628):
1. Übereilung und Vorurteil sind sorgfältig zu meiden.
2. Jede der zu untersuchenden Schwierigkeiten ist in soviele Teile zu zerlegen,
wie es möglich und zur besseren Lösbarkeit wünschenswert ist.
3. Mit den einfachsten und faßlichsten Objekten ist zu beginnen und von da aus
schrittweise zur Erkenntnis der kompliziertesten fortzuschreiten.
4. Hinreichend vollständige Aufzählungen und allgemeine Übersichten sind
anzufertigen, um sicher zu gehen, daß nichts ausgelassen wurde. Dies sind
allgemeine Regeln, die jedem Problemlöser kommen. Für den Fall daß das
zu entwerfende Verfahren einer Maschine zur Ausführung überantwortet
werden soll, nehmen sie eine spezielle Gestalt an .....
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
119
Von oben oder unten?
Variante I:
Ich plane das Menü,
dann kümmere ich mich um die Gänge
Dann die Speißen der Gänge
Dann die Zutaten
▪
▪
▪
▪
Variante II:
Ich schaue nach den Zutaten
Daraus kombiniere ich Speißen
Aus den Speisen Gänge
Aus den Gängen das Menü
▪
▪
▪
▪
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
120
Top-down, bottom-up?
Top-Down:
♦ Gefahr: Man bemerkt spät Probleme
Bottom-Up:
♦ Gefahr: Lösung passt nicht zum Problem
▪
In der Praxis werden die Methoden oft Kombiniert
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
121
bon appétit!
Beinahe hätten wir das Beste vergessen:
▪
▪
Gekochtes essen !
Algorithmus: anwenden
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
122
Vorgehensweise
▪
▪
▪
▪
▪
▪
Spezifikation der Problemstellung
Bestimmung der Definitionsbereiche
Suche nach / Vergleich mit bekannten Algorithmen, eventuell
Erweiterung oder Anpassung der bekannten Algorithmen
Anwendung von ad-hoc-Lösungsmethoden (mit anschließender
Korrektur)
Zerlegung des Problems in Teilprobleme ("divide and conquer"Vorgehensweise); auf jeder Zerlegungsebene Verwendung von
♦
♦
♦
Sequenz von Schritten
Fallunterscheidung (Alternativen)
Iteration von Schritten (Schleifen)
Wiederhole diese Vorgehensweise für jedes Teilproblem
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
123
Hinkucker...
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
124
JETZT
Java
Java
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
125
Programmiersprachen
Programmiersprachen werden benötigt, um Algorithmen
für Computer verständlich zu formulieren
Wir unterscheiden Maschinensprache und Assembler von
höheren (oder problemorientierten) Programmiersprachen
Höhere Sprachen enthalten folgende Sprachkonstrukte
(Sprachelemente)
Vereinbarungen
Anweisungen
Ausdrücke
Diese Konstrukte existieren in fast allen Sprachen, jedoch
in unterschiedlicher Ausprägung
Es gibt einige weitere Hilfskonstrukte
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
126
Vereinbarungen
Vereinbarungen dienen dazu, Namen für
Bestandteile von Programmen (z.B. Typen,
Variablen, Methoden) einzuführen
Unterschieden werden Definitionen und
Deklarationen
Bestimmte Vereinbarungen sind in Java bereits
vordefiniert; sie werden durch ein Schlüsselwort
bezeichnet
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
127
Reservierte Schlüsselwörter
abstract
case
const
else
for
implements
interface
operator
public
strictfp
throw
void
boolean
cast
continue
extends
future
import
long
outer
rest
super
throws
volatile
break
catch
default
final
generic
instanceof
native
package
return
switch
transient
while
byte
char
do
finally
goto
int
new
private
short
synchronize
try
byvalue
class
double
float
if
inner
null
protected
static
this
var
Obwohl die mit blau gekennzeichneten Wörter zurzeit nicht von Java benutzt werden,
können doch keine Variablen dieses Namens definiert werden.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
128
Ausdrücke
Alle Ausdrücke haben einen bestimmten Typ,
man sagt auch sie sind von einem bestimmten
Typ
In Ausdrücken werden Werte oder
(geschachtelte) Ausdrücke durch Operatoren zu
(größeren) Ausdrücken zusammengesetzt
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
129
Anweisungen
Anweisungen definieren den Programmablauf, sie
enthalten Ausdrücke
Zu den Anweisungen gehören je nach
Programmiersprache
Zuweisungen
Anweisungsfolgen
Leere Anweisungen
Prozedur-, Funktions-, Methoden-Aufrufe
Bedingungen
Schleifen
etc.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
130
Weitere Begriffe (Lexikalische Analyse)
Token
♦ zusammenhängendes Wort über einem Alphabet,
getrennt vom nächsten Token durch Whitespaces
♦ Alphabet: z.B. Buchstaben, aber auch: Zahlen
♦ Whitespaces: Leerzeichen, Zeilenumbruch, aber
auch: Klammern, Komma, Semikolon
Literal
♦ konkrete Angabe eines Zahl-, Zeichen- oder
Zeichenkettenwertes im Quellcode
♦ Wertkonstante
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
131
Sprachbeschreibung von Java
http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
132
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
133
JETZT!
Elementare
Elementare
Datentypen,
Datentypen,
Operationen
Operationen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
134
Wie geht's weiter?
Vordefinierte Datentypen
Boolean
Ganzzahlige Datentypen
Operationen auf ganzzahligen Datentypen
Reelle Zahlen
Operationen auf reellen Zahlen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
135
Vordefinierte Datentypen
Java definiert bereits eine Reihe von einfachen oder
Elementar-Datentypen
Sie werden Primitive Types (im Sinne von "nicht weiter
reduzierbar") genannt
PrimitiveType:
NumericType
boolean
NumericType:
IntegralType
FloatingPointType
IntegralType: one of
byte short int long char
FloatingPointType: one of
float double
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
136
Der Datentyp boolean – 1
„Almost all true is entirely a lie“ - a Yiddish folk-saying
Der Datentyp boolean umfasst die beiden Werte true und false
Folgende Operationen sind auf diese Werte anwendbar:
==, !=, ^, !, &, &&, |, ||,
ihr Ergebniswert berechnet sich nach den folgenden Regeln
Wird == auf zwei Boole'sche Operanden angewendet, ist das
Ergebnis genau dann true, wenn beide Operanden true sind oder
beide Operanden false sind; sonst ist das Ergebnis false
==
false
true
false
true
false
true
false
true
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
137
Der Datentyp boolean – 2
Wird != auf zwei Boole'sche Operanden angewendet, ist
das Ergebnis genau dann true, wenn einer der Operanden
true und der andere false ist; sonst ist das Ergebnis false
Der Operator ^ liefert das gleiche Ergebnis wie !=, wenn er
auf Boole'sche Operanden angewendet wird
Wird der einstellige Operator ! auf einen Boole'schen
Operanden angewendet, ist das Ergebnis gleich dem
negierten Operanden, d.h. aus true wird false und aus
false wird true
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
138
Der Datentyp boolean – 3
Wird & auf zwei Boole'sche Operanden angewendet, ist
das Ergebnis genau dann true, wenn beide Operanden
true sind; sonst ist das Ergebnis false
Es werden auf jeden Fall beide Operanden ausgewertet
Der Operator && liefert das gleiche Ergebnis wie &, wenn
er auf Boole'sche Operanden angewendet wird, aber:
Der rechte Operand wird nur ausgewertet, wenn der linke
Operand zu true ausgewertet wurde ("unnötige Arbeit"
wird vermieden)
Man spricht von verkürzter Auswertung
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
139
Der Datentyp boolean – 4
Wird | auf zwei Boole'sche Operanden angewendet, ist
das Ergebnis genau dann true, wenn mindestens einer der
Operanden true ist; sonst ist das Ergebnis false
Es werden auf jeden Fall beide Operanden ausgewertet
Der Operator || liefert das gleiche Ergebnis wie |, wenn er
auf Boole'sche Operanden angewendet wird, aber:
Der rechte Operand wird nur ausgewertet, wenn der linke
Operand zu false ausgewertet wurde ("unnötige Arbeit"
wird vermieden)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
140
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
141
Ganzzahlige Datentypen – 1
Folgende ganzzahlige Datentypen sind in Java
vordefiniert:
byte, short, int, long, char
Sie werden in Java als Integral Type bezeichnet;
sonst spricht man auch von Integer- oder Ordinal-Werten
Ihre Wertebereiche sind auf allen Prozessoren und
Betriebssystemen identisch definiert (das ist nur durch die
Virtuelle Maschine möglich!)
Das gleiche gilt für das Rechnen mit diesen Datentypen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
142
Ganzzahlige Datentypen – 2
byte:
von -128 bis 127
Das entspricht von –27 bis 27–1
Das entspricht den Werten Byte.MIN_VALUE bis Byte.MAX_VALUE
short:
von –32.768 bis 32.767
Das entspricht von –215 bis 215 –1
Das entspricht den Werten Short.MIN_VALUE bis Short.MAX_VALUE
int:
von –2.147.483.648 bis 2.147.483.647
Das entspricht von –231 bis 231 –1
Das entspricht den Werten Integer.MIN_VALUE bis Integer.MAX_VALUE
long:
von –9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807,
also von ca. -9*1018 bis 9*1018
Das entspricht von –263 bis 263 –1
Das entspricht den Werten Long.MIN_VALUE bis Long.MAX_VALUE
Die angegebenen Grenzen sind im jeweiligen Wertebereich enthalten
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
143
Notation von Ganzzahl-Literalen
Ganze Zahlen im Programm werden (sofern nicht anders
gekennzeichnet) intern immer als Wert vom Typ int dargestellt
Das gilt auch, wenn ihr Wert in einen byte- oder short-Typ passen
würde (Näheres dazu später)
Ganze Zahlen, die intern als long dargestellt werden sollen, werden
durch ein nachfolgendes "L" oder "l" (kleines "L") gekennzeichnet
(Achtung: kein Leerzeichen erlaubt!)
Beispiele
12L
123456789L
234l
Achtung: das "l" wird gerne mit "1" oder mit "|"
verwechselt,
→ "L" ist zu bevorzugen
Ganze Zahlen, die außerhalb der int-Grenzen liegen, müssen mit "L"
gekennzeichnet werden
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
144
Operationen auf ganzzahligen Typen – 1
Einstellige Operatoren:
- negiert die angegebene Zahl
+ (hat keinen Effekt)
Arithmetische Operatoren
+ Addition
- Subtraktion
* Multiplikation
/ Division: schneidet bei ganzen Zahlen ab, d.h. rundet nicht
% Rest einer Ganzzahl-Division
Addition und Multiplikation von ganzen Zahlen gleichen Typs in JavaProgrammen sind assoziativ (wenn keine Seiteneffekte bei der
Berechnung auftreten) und kommutativ
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
145
Operationen auf ganzzahligen Typen – 2
Im Fall von ungleichen Typen der beteiligten Operanden
– Zunächst wird die Zahl des kleineren Typs in die äquivalente Zahl des
größeren Typs konvertiert
– Dann erst wird gerechnet
– Das Ergebnis ist eine Zahl des größeren Typs
Im Fall, dass das Ergebnis einer Operation nicht in die Zahl des größeren
Typs passt
– Die Operation wird durchgeführt
– Die oberen (höchstwertigen) Bits des Ergebnisses werden abgeschnitten
– Nur diejenige Anzahl von Bits, die entsprechend des Ausdruckstyps
dargestellt werden können, wird als Ergebnis geliefert
→ Achtung:
Ein eventueller Integer-Überlauf muss vom Programmierer vermieden
werden (die Sprache/die VM sorgen nicht dafür)
Verlorengehen kann sonst ein Teil des Ergebniswertes und/oder sein
Vorzeichen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
146
Operationen auf ganzzahligen Typen – 3
Beispiele für die ganzzahlige Division
11 / 4
=?
2
11 / -4
→
=?
-2
-11 / 4
→
=?
→
-11 / -4 = ?
-2
→
2
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
147
Operationen auf ganzzahligen Typen – 4
Die Wirkung von % ist festgelegt durch die Gleichung
a % b = a – (a / b) * b
Wichtig: Übung
Beispiele für die Rest-Berechnung bei einer ganzzahligen Division
11 % 4 = ?
→ 11 – (11 / 4) * 4 = 11 – 8 = 3
11 % -4 = ?
→ 11 – (11 / -4) * (-4) = 11 – 8 = 3
-11 % 4 = ?
→ -11 – (-11 / 4) * 4 = -11 – (-8) = -3
-11 % -4 = ?
→ -11 – (-11 / -4) * (-4) = -11 – (-8) = -3
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
148
Operationen auf ganzzahligen Typen – 5
Java implementiert den ANSI/IEEE 754 - Standard
Eine Division (mit / oder %) durch 0 führt zu einer ArithmeticException
(entspricht in etwa einem Laufzeitfehler – kann abgefangen werden)
Tritt beim Programmlauf eine ArithmeticException auf, so wird das
angezeigt und das Programm bricht ab
Beispiel:
Division durch Null
java.lang.ArithmeticException: / by zero
at uebung03.GanzeZahlen.main(GanzeZahlen.java:28)
Exception in thread "main"
Dateiname
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Zeilennummer
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
149
Operationen auf ganzzahligen Typen – 6
Vergleichsoperatoren, oder relationale Operatoren
==
Test auf Gleichheit
!=
Test auf Ungleichheit
<
Test auf Kleiner-Als
>
Test auf Größer-Als
<=
Test auf Kleiner-oder-Gleich
>=
Test auf Größer-oder-Gleich
Relationale Operatoren liefern ein Ergebnis vom
Typ boolean, also true oder false
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
150
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
151
Reelle Zahlen – 1
Java unterscheidet zwei Arten reeller Zahlen, die sich durch ihre
Genauigkeit und ihren Wertebereich unterscheiden
float
Neben der 0.0 sind positive Zahlen im Bereich von 1.40239846
*10-45 bis 3.40282347*10+38 darstellbar, negative entsprechend
Das entspricht einer 32-Bit-Zahldarstellung
Das entspricht den Werten Float.MIN_VALUE bis
Float.MAX_VALUE
double
Neben der 0.0 sind positive Zahlen im Bereich von
4.94065645841246544*10-324 bis 1.79769313486231570*10+308
darstellbar, negative entsprechend
Das entspricht einer 64-Bit-Zahldarstellung
Das entspricht den Werten Double.MIN_VALUE bis
Double.MAX_VALUE
Auch für reelle Zahlen implementiert Java den ANSI/IEEE 754 Standard
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
152
Variablen & Datentypen
float:
31 Bit
32-bit Gleitpunktzahl
23 Bit
Bit 0
.........
Exponent (e)
Vorzeichen (v)
double:
63 Bit
Mantisse (1+m)
64-bit Gleitpunktzahl
52 Bit
Bit 0
.........
Exponent (e)
Vorzeichen (v)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Mantisse (1+m)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
153
Variablen & Datentypen
Rechenbeispiel (double) -0,75
nach IEEE 754: (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
- 0.75dec = - 3 / 4dec = - 3 / 2 2dec = -11bin / 2 2dec = - 0.11bin
= - 0.11bin * 2 0 =
-1.1 bin * 2 -1
| 1. Umformen das eine Binärzahl verbleibt
| 2. Auf Formel unformen und diese benutzen
= (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
| 3. Einsetzten
= (- 1)1 * (1+ .1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 bin)
* 2(-1+1023)
= 1 0111 1111 110 1000 0000 0000 0000 0000 . . . 0000 0000 0000 0000
v
e
1+m
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
154
Variablen & Datentypen
Rechenregeln
nach IEEE 754: (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
x = (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
Vorzeichen
v:
Exponent
e:
Mantisse
m:
0=positiv, 1=negativ
e = └log2 (x)┘
( └ ┘ = aufrunden )
m = (x/2e – 1) * 253 ( e = exponent )
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
155
Reelle Zahlen – 2
(Fast) Jede Programmiersprache (und jeder Computer-Prozessor)
beschränkt den Wertebereich und die Genauigkeit der Darstellung von
reellen Zahlen (willkürlich)
Der Grund dafür ist, dass man sich auf einen "beliebigen", aber festen
Speicherbedarf für die Darstellung reeller Zahlen festlegen muss
In Java werden zwei verschiedene Zahlentypen angeboten, um den
unterschiedlichen Genauigkeitsbedarf widerzuspiegeln
Bemerkungen
Im Unterschied zu vielen anderen Hochsprachen legt Java den
Wertebereich und die Genauigkeit eindeutig fest, unabhängig
davon, auf welcher Hardware ein Java-Programm läuft
Das ist zum Beispiel in C/C++ nicht der Fall!
In Common Lisp sind beliebig genaue Zahlendarstellungen
möglich, indem rationale Zahlen als Bruch gespeichert werden
können
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
156
Notation reeller Zahlen
Reelle Zahlen im Programm werden (sofern nicht anders
gekennzeichnet) intern immer als Wert vom Typ double
dargestellt
Das gilt auch, wenn ihr Wert in einen float-Typ passen
würde
Reelle Zahlen, die intern als float dargestellt werden
sollen, werden durch ein nachfolgendes "F" oder "f"
gekennzeichnet
(Achtung: kein Leerzeichen erlaubt!)
Zur Unterscheidung können reelle Zahlen, die intern als
double dargestellt werden sollen, durch ein nachfolgendes
"D" oder "d" gekennzeichnet werden (das ist aber unnötig;
Achtung: kein Leerzeichen erlaubt!)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
157
Die Syntax reeller Zahlen in Java
FloatingPointLiteral:
Digits . Digitsopt ExponentPartopt FloatTypeSuffixopt
. Digits ExponentPartopt FloatTypeSuffixopt
Digits ExponentPart FloatTypeSuffixopt
Digits ExponentPartopt FloatTypeSuffix
ExponentPart:
ExponentIndicator SignedInteger
ExponentIndicator: one of
eE
SignedInteger:
Signopt Digits
Sign: one of
+FloatTypeSuffix: one of
fFdD
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
158
Abgekürzte Syntax-Regeln
Reelle Zahlen (im Unterschied zu ganzen Zahlen) ...
enthalten entweder einen Punkt (Dezimalkomma)
oder sie besitzen einen Exponenten
oder sie sind als float oder double gekennzeichnet
oder sie enthalten eine Kombination daraus.
FloatingPointLiteral =
Digit+ "." Digit* [ "e" | "E" [ "+" | "-" ] Digit+ ] [ "f" | "F" | "d" | "D" ]
| "." Digit+
[ "e" | "E" [ "+" | "-" ] Digit+ ] [ "f" | "F" | "d" | "D" ]
| Digit+
| Digit+
( "e" | "E" [ "+" | "-" ] Digit+ ) [ "f" | "F" | "d" | "D" ]
[ "e" | "E" [ "+" | "-" ] Digit+ ] ( "f" | "F" | "d" | "D" ).
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
159
Operationen auf reellen Zahlen – 1
Einstellige Operatoren:
- negiert die angegebene Zahl
+ (hat keinen Effekt)
Arithmetische Operatoren
+ Addition
- Subtraktion
* Multiplikation
/ Division
Achtung:
Addition und Multiplikation von reellen Zahlen in JavaProgrammen sind nicht assoziativ
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
160
Vorsicht FALLE
public class calc1 {
public static void main(String[] args) {
double a,b;
a = 5e-15;
b = 1.0;
System.out.println("Ergebnis 1: " + (a + a + b));
System.out.println("Ergebnis 2: " + (a + b + a));
}
}
Ergebnis 1: 1.00000000000001
Ergebnis 2: 1.0000000000000102
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
161
Operationen auf reellen Zahlen – 2
Im Fall von ungleichen Typen der beteiligten Operanden
• Zunächst wird die Zahl des kleineren Typs in die
äquivalente Zahl des größeren Typs konvertiert; das
Ergebnis ist eine Zahl dieses Typs
Ganze Zahlen werden in den nächstliegenden reellen Wert
konvertiert
• Dann wird exakt (!) gerechnet
• Ist die Größenordnung des Ergebnisses darstellbar, wird
der exakte Werte hin zur nächsten darstellbaren Zahl des
größeren Typs gerundet
• Sonst ist ein Überlauf erfolgt, dann ist der Ergebniswert
laut ANSI/IEEE 754 als positiv oder negativ unendlich
definiert!
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
162
Operationen auf reellen Zahlen – 3
Darstellung von positiv bzw. negativ Unendlich
Eine positiv unendliche float-Zahl wird durch
Float.POSITIVE_INFINITY dargestellt
Eine negativ unendliche float-Zahl wird durch
Float.NEGATIVE_INFINITY dargestellt
Eine positiv unendliche double-Zahl wird durch
Double.POSITIVE_INFINITY dargestellt
Eine negativ unendliche double-Zahl wird durch
Double.NEGATIVE_INFINITY dargestellt
Mit den Unendlich-Werten kann weitergerechnet werden,
sie können untereinander und mit anderen Zahlen
verglichen werden etc.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
163
Operationen auf reellen Zahlen – 4
Es gibt eine weitere Rechnung, die zu einer besonderen Situation
führt:
Die Division durch 0, z.B.
1f / 0f
Ergebnistyp: float
1d / 0d
Ergebnistyp: double
In diesem Fall ist der Ergebniswert laut ANSI/IEEE 754 als
Not-a-Number ("keine Zahl") definiert
→ Es tritt kein Rechenfehler auf!
Java repräsentiert den Wert Not-a-Number als
Float.NaN bzw.
Double.NaN
→ Bei Operationen auf reellen Zahlen tritt keine Exception auf
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
164
Operationen auf reellen Zahlen – 5
Der Wert „NaN“ ist eine Zahl, aber ungleich
zu allen anderen Zahlen und
zu sich selbst.
Es existieren Testmethoden
Float.isNaN( <Ausdruck> ) und
Double.isNaN( <Ausdruck> )
Beispiele:
Float.isNaN( 0.0f / 0.0f )
// ⇒ true
0.0f / 0.0f == 0.0f / 0.0f
// ⇒ false
Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY
// ⇒ NaN
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
165
Operationen auf reellen Zahlen – 6
Rechenregeln für Ausdrücke, bei denen mindestens ein
Operand Unendlich oder NaN ist:
Alle Vergleiche mit ==, <, <=, >, >=, in denen mindestens
einer der Operanden NaN ist, liefern false als Ergebnis
Vergleiche mit != in denen mindestens einer der
Operanden NaN ist, liefern true als Ergebnis
Multiplikation
Wenn einer der Operanden NaN ist, ist das Ergebnis
NaN
Multiplikation eines Unendlich-Wertes mit einem
endlichen Wert ergibt einen Unendlich-Wert mit dem
entsprechenden Vorzeichen
Multiplikation eines Unendlich-Wertes mit 0 ergibt NaN
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
166
Operationen auf reellen Zahlen – 7
Rechenregeln für Ausdrücke, bei denen mindestens ein Operand Unendlich
oder NaN ist:
Division
Wenn einer der Operanden NaN ist, ist das Ergebnis NaN
Division eines Unendlich-Wertes durch einen anderen Unendlich-Wert
ergibt NaN
Division eines Unendlich-Wertes durch einen endlichen Wert ergibt einen
Unendlich-Wert mit dem entsprechenden Vorzeichen
Division eines endlichen Wertes durch einen Unendlich-Wert ergibt 0
Division von 0 durch 0 ergibt NaN
Division eines endlichen Wertes durch 0 ergibt einen Unendlich-Wert mit
dem entsprechenden Vorzeichen
Divisions-Rest
Wenn einer der Operanden NaN ist, ist das Ergebnis NaN
Wenn der Dividend ein Unendlich-Wert ist oder der Divisor ist 0 (oder
beides), dann ist das Ergebnis NaN
Wenn der Dividend endlich ist und der Divisor ist ein Unendlich-Wert, ist
das Ergebnis gleich dem Dividend
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
167
Operationen auf reellen Zahlen – 8
Rechenregeln für Ausdrücke, bei denen mindestens ein
Operand Unendlich oder NaN ist:
Addition und Subtraktion
Wenn einer der Operanden NaN ist, ist das Ergebnis
NaN
Die Summe zweier Unendlich-Werte mit ungleichem
Vorzeichen ergibt NaN
Die Summe zweier Unendlich-Werte mit gleichem
Vorzeichen ergibt den Unendlich-Wert mit diesem
Vorzeichen
Die Summe eines Unendlich-Wertes und eines
endlichen Wertes ergibt den Unendlich-Wert
Die Subtraktion entspricht einer Addition, bei der das
Vorzeichen des zweiten Operanden invertiert wird
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
168
??? Fragen
Haben Sie
Fragen?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
169
JETZT!
Struktur von
Java Programmen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
170
Struktur
▪
▪
▪
Programmkopf
♦ Import von Bibliotheken
♦ Name (Identifikation)
Datenbeschreibungen
♦ Konstantenfestlegung
♦ Variablen-Deklaration
♦ Variablen-Initialisierung
Funktionsbeschreibungen
♦ Definition von Teilfunktionen
♦ Berechnungen
♦ Ablaufsteuerung
♦ Ein- / Ausgabe
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
171
Beispiel – 1
import java.io.*;
import java.util.*;
Programmkopf
public class Celsius {
public static void main(String[] args) throws IOException {
// Benötigte Variablen deklarieren
String eingabeZeile;
double epsilon = 0.005;
double c = 0.0, f;
// Für die Eingabe von der Tastatur
BufferedReader eingabe =
Variablenbeschreibung new BufferedReader(new InputStreamReader(System.in));
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
172
Beispiel – 2
// Eingabe, Double-Wert einlesen
eingabeZeile = eingabe.readLine();
StringTokenizer tokens = new
StringTokenizer(eingabeZeile);
c = Double.parseDouble(tokens.nextToken());
// Umrechnen in Fahrenheit
f = c * 9.0/5.0 + 32.0;
// Ausgabe des Ergebnis
System.out.println("... in Fahrenheit: " + f +
" Grad \n");
Funktionsbeschreibung
}
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
173
JETZT!
Variablen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
174
Variablen-Vereinbarungen
Eine Variablen-Deklaration vereinbart einen Namen für
einen Speicherbereich an einer bisher freien Adresse im
Arbeitsspeicher
Variablen werden bei ihrer Deklaration mit einem Typ
versehen;
dieser wird auch statischer (oder Compilezeit-) Typ
genannt
Dieser Typ definiert
welche Werte die entsprechende Variable annehmen
kann,
welche Operationen auf dieser Variablen erlaubt sind
und
die Größe des zu reservierenden Speicherbereichs
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
175
Syntaxregeln Variablen-Vereinbarungen
Typen kennen wir bereits: boolean, byte, ...
FieldDeclaration:
FieldModifiers opt Type VariableDeclarators ;
VariableDeclarators:
VariableDeclarator
VariableDeclarators , VariableDeclarator
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
VariableDeclaratorId:
Identifier
VariableDeclaratorId [ ]
VariableInitializer:
Die ignorieren wir vorerst
Expression
ArrayInitializer
FieldModifiers:
FieldModifier
FieldModifiers FieldModifier
FieldModifier: one of
public protected private static final transient volatile
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
176
Beispiele für Variablen-Vereinbarungen
boolean a, b, c;
int i, j, k;
float f;
double d1, d2;
String name, vorname;
byte b;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Das ist ein Namenskonflikt:
Namen müssen
in ihrem Namensraum
immer eindeutig sein
Wir werden später sehen,
wie Namensräume
angelegt werden
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
177
Der Ort von Variablen-Vereinbarungen
Eclipse generiert den folgenden Code-Rahmen:
class HelloWorld {
public static void main(String[] args) {
Variablen
werden an
dieser Stelle
vereinbart
...
}
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
178
Namen für Variablen
Namen in Java beginnen mit einem Buchstaben (keinem
Sonderzeichen, keiner Ziffer) gefolgt von null oder mehreren
Buchstaben oder Ziffern
Die Buchstaben dürfen, da Java Unicode verwendet, aus einem
beliebigen Bereich im Zeichensatz stammen, zum Beispiel sind auch
deutsche Sonderzeichen erlaubt. (!)
Aus "historischen Gründen" dürfen Java-Namen auch mit einem
Unterstrich "_" und mit einem Dollar-Zeichen "$" beginnen
Beides sollte aber in neu geschriebenen Programmen vermieden
werden!
In Java können Namen Ziffern beinhalten:
Soll eine Zahl unmittelbar auf einen Namen folgen, dann muss sie
durch mindestens ein "neutrales" Zeichen davon getrennt sein
Namen können keine Leerzeichen und kein Zeilenende beinhalten
Die gleichen Regeln gelten auch für alle anderen Namen in Java,
zum Beispiel für Klassennamen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
179
Variablen in Ausdrücken – 1
Variablen eines bestimmten Type können in Ausdrücken überall dort
verwendet werden, wo auch Werte dieses Type verwendet werden
können
Voraussetzung:
Die Variable besitzt einen Wert
Speicher
An der Stelle 1
steht ja bereits
ein Wert (23)
Ein bestimmtes
Bit-Muster ist
immer vorhanden
1: 23
2: …
3: …
4: 32
5: …
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Problem:
Der Speicherinhalt ist
ungewiss
Damit ist undefiniert,
welchen Wert die neue
Variable hat
Damit ist undefiniert,
welchen Wert ein
Ausdruck annimmt, in
dem die Variable
verwendet wird
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
180
Variablen in Ausdrücken – 2
Damit immer definiert ist, welchen Wert eine Variable (in
einem Ausdruck) hat, wenn sie verwendet wird, muss jede
Variable mit einem (definierten) Wert belegt werden, bevor
sie verwendet werden darf
Eine Variable kann auf zwei Arten mit einem Wert belegt
werden:
durch eine Initialisierung oder
durch eine Wertzuweisung
Der Java-Compiler überprüft, dass Variablen auf
(zumindest) eine dieser Arten einen Wert bekommen
haben, bevor dieser Wert verwendet wird
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
181
Initialwerte für Variablen
Wert-Zuweisung bei der Initialisierung
Die Syntaxregel
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
erlaubt es, jeder Variablen einzeln bei ihrer Deklaration einen
Initialwert zu geben
Der Initialwert muss zuweisungskompatibel sein
Der Compiler überprüft das
Beispiele:
boolean a = true, b = false, c;
int i, j = 0, k = 1;
float f = 3.0f;
double d1 = 5, d2 = 7.0;
String name = "Schmidt", vorname = "Hans";
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
182
Zuweisung an Variablen – 1
Die Wert-Zuweisung als Anweisung (englisch: Statement)
wird durch folgende Syntaxregeln beschrieben:
AssignmentExpression:
ConditionalExpression Das fassen wir als
einfachen Ausdruck auf
Assignment
Assignment:
LeftHandSide AssignmentOperator
AssignmentExpression
LeftHandSide:
ExpressionName
Die ignorieren wir vorerst
FieldAccess
ArrayAccess
AssignmentOperator: one of
= *= /= %= += -= <<= >>= >>>= &= ^= |=
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
183
Zuweisung an Variablen – 2
Der Ergebniswert des Ausdrucks, der einer
Variablen zugewiesen werden soll, muss
zuweisungskompatibel sein
Der Compiler überprüft das
Die Wert-Zuweisung in Java ist keine Anweisung
im üblichen Sinne, sondern ein Ausdruck:
AssignmentExpression
Das Ergebnis des Zuweisungs-Ausdrucks ist der
zugewiesene Wert
→ Mehrfach-Zuweisungen sind erlaubt und üblich
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
184
Beispiele für Zuweisungen
Beispiele für Wertzuweisungen an Variablen
Gegeben seien die folgenden Vereinbarungen:
boolean a = true, b = false, c;
int i, j = 0, k = 1;
float f = 3.0f;
double d1 = 5, d2 = 7.0;
String name = "Schmidt", vorname = "Hans";
Die folgenden Zuweisungen sind gültig:
a = false;
c = a == b;
i = j + k;
d1 = f = Math.abs( f );
name = name + ", " + vorname;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
185
JETZT!
Konstanten
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
186
Konstanten vs. Variablen
Der Wert von Variablen kann jederzeit während
des Programmablaufs durch eine Zuweisung
geändert werden
Das ist für einige Größen nicht sinnvoll
pi, die Kreiskonstante
e, die Eulersche Zahl
usw.
Solche Werte können als konstant vereinbart
werden
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
187
Konstanten-Vereinbarung
Konstanten werden ähnlich vereinbart wie
Variablen, aber
sie müssen auf Programm (also Klassen-)
Ebene vereinbart werden,
sie werden durch die FieldModifier final und
static gekennzeichnet und
sie müssen bei der Deklaration mit einem
Initialwert versehen werden
Konstanten eines bestimmten Typs können wie
Werte dieses Typs verwendet werden
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
188
Ort der Konstanten-Vereinbarung
Eclipse generiert den folgenden Code-Rahmen:
class HelloWorld {
Konstanten
werden an
dieser Stelle
vereinbart
public static void main(String[] args) {
...
}
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
189
Beispiel
class HelloWorld {
Generierter Code
static final double PI = 3.141592653589793;
static final boolean WAHR = true;
KonstantenVereinbarungen
public static void main(String[] args) {
boolean a = WAHR, b = false, c;
int i, j = 0, k = 1;
float f = 3.0f;
double d1 = 5, d2 = 7.0;
String name = "Schmidt", vorname = "Hans";
VariablenVereinbarungen,
teils mit
Initialisierung
a = false;
c = a == b;
i = j + k;
d1 = f = Math.abs( f );
d2 = d1 * PI;
name = name + ", " + vorname;
Anweisungen
}
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
190
JETZT!
Zuweisungen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
191
Zuweisungsoperator
Zuweisungen schreiben sich
<variable> = <wert>
Ergebnis dieses Ausdrucks (!) ist wiederum der Wert:
Es ist möglich
<variable3> = <variable2> = <variable1> = <wert>
zu schreiben.
Der Ergebniswert von diesen Ausdrücken kann ignoriert
werden, d.h. er muss nicht verwendet werden.
Passiert „oft“ in Anweisungsfolgen.
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
192
Zuweisung elementarer Werte
a:
?
b:
?
c:
?
a:
5
b:
5
c:
5
b = 4;
a:
5
c = 3;
b:
4
c:
3
int
a, b, c;
a = b = c = 5;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
193
Merke!
Achtung:
Der Zuweisungsoperator in Java schreibt sich
Der Test auf Gleichheit in Java schreibt sich
→ Diese beiden werden leicht verwechselt!
=
==
Der Compiler kann nicht immer Hilfestellung leisten, Beispiel:
Aus
a = b == c;
wird versehentlich leicht
a = b = c;
Im Falle der Deklarationen
boolean a; int b, c;
meldet der Compiler einen Typfehler bei der Zuweisung an a
Im Falle der Deklarationen
boolean a, b, c;
kann der Compiler das Versehen nicht feststellen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
194
Zuweisungskompatibilität
Wir wissen bereits, dass die Typen von Operanden bei der
Verwendung in Ausdrücken zuerst einander angeglichen
werden, bevor eine Operation durchgeführt wird
Beispiel:
3.0f + 4
→ 3.0f + 4.0f
→ 7.0f
Das passiert auch beim Zuweisungsoperator
Beispiel:
double d;
d = 3.0f + 4;
→ d = 3.0f + 4.0f;
→ d = 7.0f;
→ d = 7.0d;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
195
Typ-Konvertierung – 1
Werte elementarer Typen können explizit umgewandelt
werden
Sogenannte Type Casts können jeden elementaren Typ in
jeden anderen elementaren Typ (außer boolean)
umwandeln
Schreibweise:
(<Zieltyp>) <Wert>
Beispiele:
byte b;
short sh = 18;
int i;
long l;
b = (byte) 32;
i = (int) 3.14;
l = (long) sh;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
196
Typ-Konvertierung – 2
Ist der Zieltyp „größer“ als der Typ des Wertes, dann ist
der Cast unnötig, Java macht den Cast implizit:
byte → short → int → long → float → double
char → int
Ist der Zieltyp „kleiner“ als der Typ des Wertes dann ist der
Cast explizit notwendig, sonst meldet der Compiler einen
Typfehler
Die Konvertierungsregeln folgen auf den nächsten Folien
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
197
Typ-Konvertierung – 3
double → float:
Es wird bei Bedarf so gerundet, dass eine möglichst
geringe Differenz bleibt
double → long
double → int
double → short
double → byte
float → long
float → int
float → short
float → byte
Nachkommastellen werden abgeschnitten
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
198
Typ-Konvertierung – 4
long → int
long → short
long → byte
int → short
int → byte
short → byte:
Überzählige Bitstellen werden abgeschnitten, dabei
können Vorzeichenfehler auftreten!
Beispiel:
(byte)256
⇒
0
(byte)120
⇒
120
(byte)128
⇒
-128
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
199
Typ-Konvertierung – 5
Kein Cast ist nötig für folgende Konvertierungen:
byte → short
byte → int
byte → long
short → int
short → long
int → long
char → short
char → int
char → long
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
200
Abkürzende Schreibweisen – 1
Für häufig gebrauchte Operationen gibt es abkürzende
Schreibweisen bei der Zuweisung
Beispiel
a = a + 1;
kann geschrieben werden als
a += 1;
Das erlaubt die (bereits bekannte) Syntaxregel
AssignmentOperator: one of
= *= /= %= += -= <<= >>= >>>= &= ^= |=
Diese Operatoren sind noch nicht bekannt
Der Wert einer solchen verkürzten Zuweisung entspricht
dem Wert des ursprünglichen Ausdrucks
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
201
Abkürzende Schreibweisen – 2
Für häufig gebrauchte Operationen gibt es weitere abkürzende
Schreibweisen bei der Zuweisung
Beispiel
a = a + 1; oder auch a += 1;
kann noch kürzer geschrieben werden als
a++;
oder
++a;
Entsprechend gibt es auch den "--"-Operator
Diese Operatoren werden Inkrement und Dekrement genannt
Da man sie vor und nach der Variablen schreiben kann, spricht man
von Präfix- bzw. Postfix-Inkrement- und Dekrement-Operatoren
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
202
Abkürzende Schreibweisen – 3
Der Unterschied zwischen den Präfix- und den Postfix-Operatoren liegt
im Zeitpunkt der Auswertung
Tritt ein Präfix-Operator in einem umgebenden Ausdruck auf, so wird
das Inkrement/Dekrement ausgeführt, bevor mit dem neuen Wert der
Variablen weitergerechnet wird
Tritt ein Postfix-Operator in einem umgebenden Ausdruck auf, so wird
mit dem alten Wert der Variablen weitergerechnet, bevor das
Inkrement/Dekrement ausgeführt wird
Beispiel
int a, b = 1;
a = b++;
→ b == 2, a == 1
a = ++b;
→ b == 3, a == 3
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
203
Abkürzende Schreibweisen – 4
Ähnlich wie die Operator-Vorrangregelung ohne
Klammerung kann die häufige Verwendung von
Präfix-/Postfix-Inkrement und –Dekrement zu
Verständnisschwierigkeiten beim Lesen von
Programmen führen
→ Vorsichtig einsetzen!
Die beiden Varianten werden hauptsächlich bei
der Indizierung von Arrays (Feldern) benutzt (s.
später); wir werden dann in Beispielen darauf
zurückkommen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
204
Abkürzende Schreibweisen – 5
Die folgende Syntaxregel beschreibt Zuweisungen
(Assignment) sowie die vorgestellten abkürzenden
Schreibweisen:
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
...
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
205
Allgemeines zu Namenskonventionen
Für Programme in der Sprache Java werden genaue Konventionen für
die Wahl von Namen angegeben
Diese Konventionen werden zum Beispiel in den umfangreichen
Bibliotheken, die zu einer Java-Implementierung gehören,
angewendet und haben diverse Vorteile gezeigt
Sie sollten befolgt werden, sofern irgend möglich (sinnvolle
Ausnahmen bestätigen die Regel)!
Wichtig ist vor allen Dingen, Konventionen konsistent zu befolgen,
z.B. nur englische oder nur deutsche Namen zu benutzen
Sie sind auch für die Übungen zur Vorlesung Inf als Vorgabe zu
betrachten
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
206
Namenskonventionen: Konstanten
Namen für Konstanten sollten als Folge aus einem oder mehreren Worten
gewählt werden, alle in Großbuchstaben geschrieben und die einzelnen Worte
durch Unterstriche getrennt
Namen für Konstanten sollten beschreibend sein und nicht unnötig abgekürzt
werden
Beispiele:
MIN_VALUE
MAX_VALUE
PI
Gruppen von Konstanten, die zusammengehörige Werte kennzeichnen,
sollten mit einer gemeinsamen Buchstabenfolge, z.B. einem Akronym,
beginnen
Beispiele
M_START,
M_STOP
für Start bzw. Stopp einer Maschine
WC_BLUE,
WC_RED,
WC_GREEN
für verschiedene Farben eines Fensterrahmens
(WindowColor)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
207
Namenskonventionen Variablen – 1
Variablennamen sollten mit einem Kleinbuchstaben
beginnen, nachfolgende Wörter sollten dann jeweils mit
einem Großbuchstaben beginnen (nicht etwa durch einen
Unterstrich abgesetzt sein)
Lokale Variablennamen sollten kurz, aber sinnvoll gewählt
werden, z.B. als Folge von Kleinbuchstaben, die keine
Worte sind
Beispiele
Akronyme, z.B. "cp" für eine Variable des Typs
ColoredPoint
Abkürzungen, z.B. "buf" für eine Puffer-Variable
Kurzworte, die in ähnlicher Weise immer wieder
verwendet werden, z.B. "in" und "out" für Ein- und
Ausgabedateien
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
208
Namenskonventionen Variablen – 2
Namen, die nur aus einem Buchstaben ("a", "b",
"c") bestehen sollten vermieden werden, wie auch
durchnummerierte Namen ("i1", "i2", "i3")
Ausnahmen von dieser Regel: temporäre und
Schleifenvariablen – typische Beispiele:
"c" für einen char-Wert
"d" für einen double-Wert
"f" für einen float-Wert
"i", "j", "k" für int-Werte
"s" für einen String
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
209
Eindeutigkeit von Namen
Innerhalb eines Namensraumes müssen Namen immer eindeutig sein
Bis jetzt gilt:
Es dürfen keine zwei gleichnamigen Variablen deklariert werden
Es dürfen keine zwei gleichnamigen Konstanten deklariert werden
Hat eine Variable den gleichen Namen wie eine Konstante, dann
überdeckt die Variable die Konstante; die Konstante ist dann nicht
länger sichtbar (also auch nicht zugreifbar)
Es gibt an dieser Stelle keinen Namenskonflikt, weil die Variable in
einem anderen Namensraum deklariert wird als die Konstante
Der Namensraum für die Konstante ist das gesamte Programm
(also die Klasse), derjenige für die Variable ist die Methode "main"
Die Methode ist in das Programm eingeschachtelt, daher
überdeckt die Variable im lokalen Namensraum die Konstante im
umgebenden, globalen Namensraum
Der Compiler überprüft, ob Namenskonflikte vorliegen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
210
Beispiel
Programm (Klasse)
final static int k = 2;
main (Methode)
int k = 15;
"main" ist in das Programm
eingeschachtelt, daher überdeckt die
Variable im lokalen Namensraum die
Konstante im globalen Namensraum
x = .... + k + ....;
Der Namensraum für
die Variable k ist die
Methode "main"
Der Namensraum für die
Konstante k ist das gesamte
Programm (also die Klasse)
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Namensräume
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
211
??? Fragen
Welche Fragen
gibt es?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
212
JETZT
if - Anweisung
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
213
Bedingungen in Algorithmen
Anweisung
Bedingung
erfüllt
Anweisung
Bedingung
nicht erfüllt
Bedingung
erfüllt
Bedingung
nicht erfüllt
Alternative
Anweisung 1
Anweisung
Anweisung
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Alternative
Anweisung 2
Anweisung
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
214
Syntaxregeln für Bedingungen in Java
Statement:
IfThenStatement
IfThenElseStatement
...
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
Der Ausdruck (Expression) muss vom Typ Boolean sein,
sonst lehnt der Compiler die Übersetzung des Programms
ab
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
215
3 Formen für Bedingungen in Java – 1
<Anweisung>
Anweisung
Bedingung
erfüllt
Bedingung
nicht erfüllt
if ( <Bedingung> )
<Optionale Anweisung>
<Anweisung>
Optionale
Anweisung
Anweisung
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
216
3 Formen für Bedingungen in Java – 2
<Anweisung>
Anweisung
Bedingung
erfüllt
Bedingung
nicht erfüllt
Alternative
Anweisung 1
if ( <Bedingung> )
<Alternative Anweisung 1>
else
<Alternative Anweisung 2>
<Anweisung>
Alternative
Anweisung 2
Anweisung
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
217
3 Formen für Bedingungen in Java – 3
<Anweisung>
if ( <Bedingung 1> )
<Alternative Anweisung 1>
Anweisung
Bedingung1
erfüllt
Alternative
Anweisung 1
Bedingung1
nicht erfüllt
Bedingung2
erfüllt
Bedingung2
nicht erfüllt
else if ( <Bedingung 2> )
<Alternative Anweisung 2>
...
Alternative
Anweisung 2
...
else if ( <Bedingung n> )
<Alternative Anweisung n>
else
<Default-Anweisung>
<Anweisung>
Anweisung
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
218
Beispiele
float f = ...;
boolean b = ...;
if ( f > 12 )
f = Math.sqrt( f );
if ( b )
System.out.println( f );
else
b = Math.sqrt( f ) > 12;
if ( b )
System.out.println( "f = " + f );
else if ( f == 7 )
System.out.println( "Reiner Zufall!" );
else
f = 7;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
219
Problem: „Dangling Else“ – 1
Beispiel für mögliche Interpretationen: siehe Formatierung
if ( <Bedingung1> )
if ( <Bedingung2> )
<Anweisung1>
else
<Anweisung2>
if ( <Bedingung1> )
if ( <Bedingung2> )
<Anweisung1>
else
<Anweisung2>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
220
Problem: „Dangling Else“ – 2
wert1 = 5;
wert2 = 5;
ergebnis = 10;
if ( wert1 > 10 )
if ( wert2 > 10 )
ergebnis = 100;
else
ergebnis = 1000;
wert1 = 5;
wert2 = 5;
ergebnis = 10;
if ( wert1 > 10 )
if ( wert2 > 10 )
ergebnis = 100;
else
ergebnis = 1000;
→ ergebnis == 10
→ ergebnis == 1000
Das ist die Java-Interpretation:
ein „else“ gehört zum letzten freien „if“
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
221
Konventionen zur Notation – 1
Prinzipiell werden „einfache“ Anweisungen (Zuweisungen,
Aufrufe von Operationen, leere Anweisungen) nach
Möglichkeit einzeln in einer Zeile notiert
Die optionalen oder alternativen Anweisungen im Rumpf
von Bedingungen werden 2 Zeichen (oder 1 Tabulator)
eingerückt
Ziel dieser Konventionen
Man soll auf den ersten Blick erkennen, dass es sich um
eine Bedingung handelt und wie weit sich die optionalen
oder die alternativen Anweisungen erstrecken
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
222
Konventionen zur Notation – 2
Folgt nach einem if eine einzelne Anweisung (d.h. keine
Anweisungsfolge), so
steht das if mit seiner Bedingung alleine in einer Zeile,
die Anweisung wird eingerückt und
die nachfolgende Anweisung oder das else, sofern vorhanden,
steht wieder auf Höhe des if
Beispiele:
if ( <Bedingung> )
<Anweisung>
<Anweisung>
if ( <Bedingung> )
<Anweisung>
else
...
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
223
Konventionen zur Notation – 3
Folgt nach einem if eine Anweisungsfolge, so
steht das if mit seiner Bedingung und der öffenden
Klammer alleine in einer Zeile,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer und das else, sofern
vorhanden, stehen wieder auf Höhe des if
Beispiele:
if ( <Bedingung> ) {
if ( <Bedingung> ) {
<Anweisung>
<Anweisung>
...
...
<Anweisung>
<Anweisung>
} else
}
...
<Anweisung>
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
224
Konventionen zur Notation – 4
Folgt nach einem else eine einzelne Anweisung, so
stehen die schließende Klammer, sofern vorhanden, und
das else alleine in einer Zeile,
die Anweisung wird eingerückt und
die nachfolgende Anweisung steht wieder auf Höhe des
if
Beispiele:
if ( <Bedingung> )
<Anweisung>
else
<Anweisung>
<Anweisung>
if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else
<Anweisung>
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
225
Konventionen zur Notation – 5
Folgt nach einem else eine Anweisungsfolge, so
stehen die schließende Klammer, sofern vorhanden, und das
else mit der öffnenden Klammer alleine in einer Zeile,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht alleine wieder auf Höhe des if
Beispiele:
if ( <Bedingung> )
<Anweisung>
else {
<Anweisung>
}
<Anweisung>
if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else {
<Anweisung>
}
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
226
Konventionen zur Notation – 6
Folgen nach einem else weitere (eingeschachtelte) if-Anweisungen, so
werden diese nicht weitere 2 Zeichen eingerückt, sondern
das else steht zusammen mit dem nachfolgenden if und seiner
Bedingung in einer Zeile und
die anderen Konventionen werden entsprechend angewendet, als
ob die (eingeschachtelten) if-Anweisungen auf Höhe des ersten if
stehen würden
Beispiele:
if ( <Bedingung> )
<Anweisung>
else if ( <Bedingung> )
<Anweisung>
<Anweisung>
if ( <Bedingung> )
<Anweisung>
else if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else if ( <Bedingung> )
<Anweisung>
...
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
if ( <Bedingung> )
<Anweisung>
else if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else if ( <Bedingung> )
<Anweisung>
else if ( ...
...
else
...
<Anweisung>
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
227
Merke!
▪
Ziel:
Man soll auf den ersten Blick erkennen, dass es
sich um eine Bedingung handelt und wie weit sich
die optionalen oder die (verschiedenen)
alternativen Anweisungen erstrecken
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
228
Abkürzende Schreibweisen
int i = 4, j = 5, k;
Statt:
if (i > j)
k=7;
else
k=2;
kann (kürzer) formuliert werden:
k = (i > j) ? 7 : 2 ;
Formal:
Variable = (BooleanExpression) ? Then-Value : Else-Value ;
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
229
??? Fragen
Welche Fragen
gibt es?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
230
JETZT!
Schleifen
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
231
Akzeptierende Schleifen – 1
Anweisung 1
Anweisung 2
Bedingung
erfüllt
Bedingung
nicht erfüllt
Anweisung 3
Ablauf:
1. Der Schleifenrumpf (Anweisung 2) wird
ausgeführt
2. Die Bedingung wird ausgewertet
– Ist die Bedingung erfüllt, dann wird das
Programm mit Anweisung 2 fortgesetzt;
der Schleifenrumpf wird erneut
durchlaufen
– Ist die Bedingung nicht erfüllt, dann wird
das Programm mit Anweisung 3 fortgesetzt
Es handelt sich um eine akzeptierende
Schleife:
Unabhängig von der Bedingung wird der
Schleifenrumpf mindestens ein Mal
durchlaufen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
232
Akzeptierende Schleifen – 2
Anweisung 1
Anweisung 2
Bedingung
erfüllt
Bedingung
nicht erfüllt
Es sind drei Fälle möglich
Bereits die erste Auswertung des Ausdrucks
liefert false
Die wiederholte Auswertung des Ausdrucks
liefert eine endliche Folge von
true, true, ..., true, false
von Ergebnissen
Die wiederholte Auswertung des Ausdrucks
ergibt immer den Wert true
Im 3. Fall spricht man von einer
Endlosschleife, das ist erlaubt, aber
semantisch selten sinnvoll
Anweisung 3
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
233
Syntaxregeln für akzeptierende Schleifen
Akzeptierende Schleifen sind Anweisungen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
DoStatement
...
DoStatement:
do Statement while ( Expression ) ;
Der Ausdruck (Expression) muss vom Typ Boolean sein, sonst lehnt
der Compiler die Übersetzung des Programms ab
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
234
Beispiel – 1
i = 1;
do
i=1
i++;
while ( i < 10 );
System.out.println( i );
i++
i < 10
i >= 10
System.out.println( i )
Ausgabe:
10
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
235
Beispiel – 2
i=1
i++
System.out.println( i )
i < 10
i = 1;
do {
i++;
System.out.println( i );
} while ( i < 10 );
System.out.println( "Ende" );
Ausgabe:
i >= 10
System.out.println("Ende")
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
2
3
4
...
10
Ende
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
236
Beispiel – 3
int i, summe;
summe = 0;
i = 0;
do {
summe += i;
i++;
} while ( i < 100 );
System.out.println( summe );
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
237
Abweisende Schleifen – 1
Anweisung 1
Bedingung
nicht erfüllt
Anweisung 2
Bedingung
erfüllt
Anweisung 3
Ablauf:
• Die Bedingung wird ausgewertet
– Ist die Bedingung erfüllt, dann wird der
Schleifenrumpf (Anweisung 2)
durchlaufen
Das Programm wird mit Schritt 1
fortgesetzt
– Ist die Bedingung nicht erfüllt, dann wird
der Schleifenrumpf übersprungen
Es handelt sich um eine abweisende
Schleife:
Ist die Bedingung gleich zu Beginn nicht
erfüllt, wird der Schleifenrumpf
nicht ein einziges Mal durchlaufen
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
238
Abweisende Schleifen – 2
Anweisung 1
Bedingung
nicht erfüllt
Anweisung 2
Bedingung
erfüllt
Anweisung 3
Es sind drei Fälle möglich
Bereits die erste Auswertung des
Ausdrucks liefert false
Die wiederholte Auswertung des
Ausdrucks liefert eine endliche Folge
von
true, true, ..., true, false
von Ergebnissen
Die wiederholte Auswertung des
Ausdrucks ergibt immer den Wert
true
Im 3. Fall spricht man von einer
Endlosschleife, das ist erlaubt, aber
semantisch selten sinnvoll
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
239
Syntaxregeln für abweisende Schleifen
Auch Abweisende Schleifen sind Anweisungen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
DoStatement
WhileStatement
...
WhileStatement:
while ( Expression ) Statement
Der Ausdruck (Expression) muss vom Typ Boolean sein, sonst lehnt
der Compiler die Übersetzung des Programms ab
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
240
Beispiel für eine abweisende Schleife – 1
i = 1;
while ( i < 10 )
i=1
i++;
i >= 10
System.out.println( i );
i < 10
i++
Ausgabe:
System.out.println( i )
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
10
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
241
Beispiel für eine abweisende Schleife – 2
Die Anweisungsfolge
ist eine Anweisung
i = 1;
{
while ( i < 10 )
i=1
i++;
System.out.println( i );
i >= 10
i < 10
)
i++;
System.out.println( i
}
System.out.println( “Ende“ );
System.out.println("Ende")
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Ausgabe:
2
3
4
...
10
Ende
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
242
Beispiel für eine abweisende Schleife – 3
int i, summe;
summe = 0;
i = 0;
while ( i < 100 ) {
summe += i;
i++;
}
System.out.println( summe );
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
243
Überführung von Schleifen:
akzeptierende in abweisende – 1
Anweisung1
Anweisung1
Bedingung
erfüllt
Bedingung
nicht erfüllt
Bedingung
nicht erfüllt
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Bedingung
erfüllt
Anweisung1
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
244
Überführung von Schleifen:
akzeptierende in abweisende – 2
do
<Anweisung>
while ( <Bedingung> );
<Anweisung>
while ( <Bedingung> )
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
245
Überführung von Schleifen:
abweisende in akzeptierende – 1
Bedingung
erfüllt
Bedingung
nicht erfüllt
Bedingung
nicht erfüllt
Bedingung
erfüllt
Anweisung
Bedingung
erfüllt
Anweisung
Bedingung
nicht erfüllt
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
246
Überführung von Schleifen:
abweisende in akzeptierende – 2
while ( <Bedingung> )
<Anweisung>
if ( <Bedingung> )
do
<Anweisung>
while ( <Bedingung> );
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
247
Konventionen zur Notation – 1
Der Rumpf von (akzeptierenden und abweisenden) Schleifen wird 2
Zeichen (oder 1 Tabulator) eingerückt
Besteht der Rumpf einer while-Schleife aus einer einzelnen
Anweisung (d.h. nicht aus einer Anweisungsfolge), so
steht das while mit der Bedingung in einer Zeile,
die Anweisung wird eingerückt und
die erste Anweisung nach der Schleife steht wieder auf Höhe des
while
Beispiel:
<Anweisung>
while ( <Bedingung> )
<Anweisung>
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
248
Konventionen zur Notation – 2
Besteht der Rumpf einer while-Schleife aus einer
Anweisungsfolge, so
wird die öffnende Klammer nach der while-Bedingung
in der gleichen Zeile notiert,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht alleine in einer Zeile
wieder auf Höhe des while
Beispiel:
<Anweisung>
while ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
}
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
249
Konventionen zur Notation – 3
Besteht der Rumpf einer do-Schleife aus einer einzelnen
Anweisung (d.h. nicht aus einer Anweisungsfolge), so
steht das do alleine in einer Zeile,
die Anweisung wird eingerückt und
das while steht mit seiner Bedingung in einer Zeile
wieder auf Höhe des do
Beispiel:
<Anweisung>
do
<Anweisung>
while ( <Bedingung> );
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
250
Konventionen zur Notation – 4
Besteht der Rumpf einer do-Schleife aus einer Anweisungsfolge, so
wird das do mit der öffnenden Klammer alleine in einer Zeile notiert,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht mit dem while und seiner Bedingung in
einer Zeile und wieder auf Höhe des do
Beispiel:
<Anweisung>
do {
<Anweisung>
...
<Anweisung>
} while ( <Bedingung> );
<Anweisung>
Ziel dieser Konventionen:
Man soll auf einen Blick erkennen, um welche Schleife es sich handelt und
was zum Schleifenrumpf gehört
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
251
??? Fragen
Welche Fragen
gibt es?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
252
Schleifen in Algorithmen
Neben abweisenden und akzeptierenden Schleifen gibt es in Java
auch Zählschleifen
Zählschleifen besitzen eine Schleifenvariable
Diese kann in der Schleife selbst eingeführt werden
Sie wird in der Schleife initialisiert
Sie wird in der Schleife regelmäßig erhöht oder erniedrigt
Der Abbruch der Schleife wird über den Wert der
Schleifenvariablen gesteuert
Bemerkung
Es ist durchaus möglich, Zählschleifen (fast vollkommen) anders zu
verwenden (ein Beispiel wird noch gezeigt)
Das ist aber ein sehr schlechter Programmierstil!
Stattdessen sollten dann besser while- oder do-Schleifen verwendet
werden
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
253
Syntaxregeln für Zählschleifen – 1
Zählschleifen sind Anweisungen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
WhileStatement
DoStatement
ForStatement
...
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
254
Syntaxregeln für Zählschleifen – 2
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForInit:
StatementExpressionList
LocalVariableDeclaration
StatementExpressionList:
StatementExpression
StatementExpressionList , StatementExpression
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
...
ForUpdate:
StatementExpressionList
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
255
Beispiel für eine for-Schleife – 1
ForInit: StatementExpression (Zuweisung)
Expression:
• Muss vom Typ Boolean sein
• Wenn sie nicht erfüllt ist, wird die Schleife
beendet
ForUpdate: StatementExpression (Zuweisung)
for ( i = 1; i <= 10; i++ )
System.out.println( i );
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
256
Beispiel für eine for-Schleife – 2
for ( i = 1; i <= 10; i++ )
i=1
System.out.println( i );
i > 10
i <= 10
Äquivalente while-Schleife
System.out.println( i )
i++
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
i = 1;
while ( i <= 10 ) {
System.out.println( i );
i++;
}
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
257
Beispiel für eine for-Schleife – 3
2 Variablen, Initialisierungen möglich, aber nur ein Typ erlaubt
for ( int i=10, j=0; i >= 0; i--, j++ ) {
Beide Variablen können
modifiziert werden
System.out.println( „Schleifenvariable: “ + i );
System.out.println( „Anzahl der Durchläufe: “ + j );
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
258
Beispiele für Fehler in for-Schleifen
{
int i;
Doppelte Deklaration der Variablen i
...
for ( int i=10; i >= 0; i-- )
...
}
for ( int i=10; i >= 0; i-- ) {
...
}
System.out.println( i ); Variable i ist hier nicht bekannt
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
259
Beispiele „entfremdete“ for-Schleifen – 1
Folgende Schleifen sind (gültige) Endlos-Schleifen
for ( ; true; )
System.out.println( "forever" );
for ( ; ; )
System.out.println( "forever" );
Steht Programmtext nach einer dieser beiden Schleifen
noch mindestens eine Anweisung, so meldet der Compiler
einen Fehler, weil dieser Programmteil nie erreicht werden
kann
In beiden Fällen wäre eine while-Schleife adäquat
while ( true )
System.out.println( "forever" );
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
260
Beispiele „entfremdete“ for-Schleifen – 2
Folgende Schleife wird „künstlich“ beendet
boolean stopIt;
for ( int i=1; i <= 100; i++ ) {
...
stopIt = ...;
if ( stopIt )
i = 101;
...
}
Auf den ersten Blick übersieht man leicht, dass die Schleife eventuell
weniger als 100 Durchläufe hat
Auch in diesem Fall wäre eine while-Schleife adäquat
int i = 1;
while ( (i <= 100) & !stopIt ) {
...
stopIt = ...;
...
i++;
}
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
261
Konventionen zur Notation – 1
Der Rumpf von Zähl-Schleifen wird 2 Zeichen (oder 1 Tabulator)
eingerückt
Besteht der Rumpf einer for-Schleife aus einer einzelnen Anweisung
(d.h. nicht aus einer Anweisungsfolge), so
steht das for mit der Schleifenkontrolle in einer Zeile,
die Anweisung wird eingerückt und
die erste Anweisung nach der Schleife steht wieder auf Höhe
des for
Beispiel:
<Anweisung>
for ( <Initialisierung>; <Bedingung>; <Update> )
<Anweisung>
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
262
Konventionen zur Notation – 2
Besteht der Rumpf einer for-Schleife aus einer Anweisungsfolge, so
wird die öffnende Klammer nach der for-Schleifenkontrolle in der
gleichen Zeile notiert,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht alleine in einer Zeile wieder auf
Höhe des for
Beispiel:
<Anweisung>
for ( <Initialisierung>; <Bedingung>; <Update> ) {
<Anweisung>
...
<Anweisung>
}
<Anweisung>
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
263
Struktogrammsymbol
▪
▪
▪
▪
Es gibt kein eigenes Symbol für Zählschleifen
Es handelt sich bei Zählschleifen ja um abweisende
Schleifen
Als Bedingung wird die komplette Schleifensteuerung
eingetragen
Im Strukturblock findet man dann die Anweisungen im
Rumpf der for-Schleife (ohne update)
for ( int k=0; k<10; k++ )
Strukturblock
GDI – TSK , Imperative Programmierung - Teil I ( V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
264
??? Fragen
Welche Fragen
gibt es?
GDI – TSK , Imperative Programmierung - Teil I (V4 – 26.09.10)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
265
Herunterladen