Ansprechpartner - Hochschule Bochum

Werbung
Grundlagen der Informatik
Einführung in die objektorientierte Software-Entwicklung mit JAVA
Teil 1
Prof. Dr. rer. nat. Katrin Brabender (Skript)
Prof. Dr.-Ing. Reiner Dudziak (Vorlesung)
Dipl.-Ing. Torsten Richta (Vorlesung)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 1
Labor für Informatik –
Ansprechpartner
Dozent:
Prof. Dr.-Ing. Reiner Dudziak
Raum: C4 – 04
Telefon: +49 (0) 234 / 32 – 10 423
eMail: [email protected]
Sprechzeiten: dienstags, 12h – 13h
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 2
Labor für Informatik –
Ansprechpartner
Dozent:
Dipl.-Ing. Torsten Richta
Raum: C6 – 06
Telefon: +49 (0) 234 / 32 – 10 375
eMail: [email protected]
Sprechzeiten: immer dann, wenn Zeit da ist; kommen
Sie einfach vorbei oder schreiben Sie eine eMail
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 3
Labor für Informatik –
Ansprechpartner
Mitarbeiter:
Dipl.-Ing. Dirk Mohr
Raum: C2 – 05
Telefon: +49 (0) 234 / 32 – 10 454
eMail: [email protected]
Sprechzeiten: immer dann, wenn Zeit da ist; kommen
Sie einfach vorbei oder schreiben Sie eine eMail
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 4
Labor für Informatik –
Ansprechpartner
Mitarbeiter:
Dipl.-Ing. (FH) Jörg Henrich
Raum: C2 – 05
Telefon: +49 (0) 234 / 32 – 10 454
eMail: [email protected]
Sprechzeiten: donnerstags (und immer dann, wenn
Zeit da ist; kommen Sie einfach vorbei oder schreiben
Sie eine eMail)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 5
Labor für Informatik – Institutsseite auf der
Homepage der Hochschule Bochum
Die Institutsseite des Labors für Informatik auf der Homepage
p g der Hochschule
Bochum finden Sie wie folgt:
http://www.hochschule-bochum.de
> Fachbereich Mechatronik und Maschinenbau > Einrichtungen
Institute > (Institut für) Automatisierung > Lehre > Informatik
(IN)/Grundlagen der Informatik (GIN)
Hi finden
Hier
fi d Sie
Si Übungsaufgaben
Üb
f b undd Informationen
I f
ti
zur Vorlesung
V l
sowie
i
Informationen zum Praktikum, Literaturhinweise und nützliche Links.
Aktuelle Informationen stellen wir außerdem auf die Pinnwand im meine_BOBereich auf der Homepage der Hochschule Bochum.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 6
Hinweis zu den Übungsaufgaben
Musterlösungen zu den auf der Homepage der Hochschule
Bochum auf den Seiten des Labors für Informatik zum
Download angebotenen Übungsaufgaben, die möglicherweise an der Hochschule Bochum im Umlauf sind, sind
weder von uns herausgegeben noch auf ihre Richtigkeit
überprüft und "abgesegnet" worden.
Wir empfehlen Ihnen, die Aufgaben selbstständig - alleine
oder in Lerngruppen - zu lösen, und bieten Ihnen gerne die
Möglichkeit an, uns bei Problemen anzusprechen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 7
Labor für Informatik –
Informationen zur Vorlesung GIN
Ergänzende
g
Informationen (Beispielprogramme,
p p g
, Übungsaufgaben,
g
g
, zusätzliche
Folien, ...) zu den einzelnen Vorlesungen werden nur nach Anforderung
versendet:
Dies geschieht durch eine eMail mit dem Betreff
VorlesungGINxxxx
an [email protected]. Hierbei steht xxxx für eine Kombination aus
Z hl undd Buchstaben,
Zahlen
B h t b die
di Ihnen
Ih
i der
in
d entsprechenden
t
h d Vorlesung
V l
mitgeteilt
it t ilt
wird.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 8
Labor für Informatik – Informationen
(Spielregeln) zum Praktikum GIN
• Wer an einem Termin nicht teilnehmen kann,, muss sich spätestens
p
eine Woche vor dem Termin abmelden und sich um einen
Ausweichtermin (s. nächste Seite) kümmern.
• Bei Krankheit ist es zwingend erforderlich, sich um einen
Ausweichtermin zu kümmern und ein ärztliches Attest vorzulegen.
• Das Praktikum ist am vorgesehenen Termin zu absolvieren. Wird das
Praktikum ohne Absprache zu einem anderen Termin besucht, wird kein
Testat erteilt.
• Es muss immer der vorherige Versuch testiert sein, bevor ein neuer
Versuch zum Testat vorgelegt werden kann.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 9
Vorgehensweise im Praktikum IN
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 10
Termine für das Praktikum IN
(WiSe 2011/2012)
Gruppe
pp BMB1 (donnerstags):
g
27.10.,, 17.11.,, 01.12.,, 15.12.,, 12.01.
Gruppe BMB2 (donnerstags):
10.11., 24.11., 08.12., 22.12., 19.01.
Gruppe BMB3 (dienstags):
25.10., 15.11., 29.11., 13.12., 10.01.
Gruppe BMB4 (dienstags):
08.11., 22.11., 06.12., 20.12., 17.01.
BWIM (1. Semester):
donnerstags (parallel zu BMB1 oder
BMB 2)
Die Gruppeneinteilung finden Sie auf der Institutsseite auf der Homepage
der Hochschule Bochum.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 11
Themen des 1. Semesters
1. Grundbegriffe aus der Informatik
2. Zahlendarstellung und mathematische Grundoperationen in einem
Rechnersystem
3. Grundlagen der Booleschen Algebra
4. Softwareentwicklung mit JAVA
•
Datentypen
•
Kontrollstrukturen
•
Methoden
•
Grundlagen der Objektorientierung (Klassen, Vererbung, Kapselung etc.)
•
Ausnahmebehandlung
•
Die Klassen Object, String, StringBuffer
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 12
1. Grundbegriffe aus der Informatik
Aufbau eines Rechnersystems
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 13
Der Universalrechenautomat nach von Neumann
Der logische Aufbau moderner Computer folgt dem Konzept des
Mathematikers John von Neumann (1903-1957) und wurde in den Jahren
1946/47 in den USA entwickelt.
Der von Neumann Rechner besteht im Wesentlichen aus den drei Einheiten
-
Speicherwerk (Arbeitsspeicher)
Hier werden die Programme und Daten gespeichert
-
Rechenwerk
Hier werden die Rechenoperationen und logischen Verknüpfungen
ausgeführt
-
Steuerwerk
Hier werden der Programmablauf sowie die Ein- und Ausgabe von
Programmen und Daten gesteuert
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 14
Grundlegende Eigenschaften des von Neumann Rechners
•
Struktur ist unabhängig von den zu bearbeitenden Problemen
•
Programme,
g
, Befehle und Daten befinden sich im selben Speicherwerk
p
•
Der Speicher wird in einzelne Speicherplätze unterteilt, die eine
eindeutige Adresse haben.
=> Informationen können eindeutig angesprochen werden
•
Das Duale Zahlensystem wird verwendet
•
Sequentielles Abarbeiten von Befehlen
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 15
Die Zentraleinheit eines Computers
Steuerwerk
Hauptp
speicher
CPU
Rechenwerk
R h
k
Zentraleinheit
Komponenten der Zentraleinheit sind
-
Steuerwerk (control unit)
-
Rechenwerk
-
Hauptspeicher
CPU (Central Processing Unit)
Der Informationsaustausch erfolgt über zwei Bussysteme.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 16
Die CPU (Central Processing Unit)
Die CPU besteht aus dem Steuerwerk und Rechenwerk.
Si iistt d
Sie
das K
Kernstück
tü k eines
i
C
Computers.
t
Die CPU dient zur Verarbeitung von Daten, die sich im Speicher des
Rechners befinden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 17
Das Steuerwerk mit Befehlsregister, Befehlszähler, Adressregister
•
steuert den Austausch von Daten mit dem Arbeitsspeicher
•
steuert den Datenaustausch mit den Peripheriegeräten, wie Festplatte,
Drucker etc.
•
steuert die Ausführung der Maschinenbefehle
Register sind extrem schnelle Hilfsspeicherzellen mit denen die CPU die
logischen Operationen ausführen kann. Diese liegen nicht im Arbeitsspeicher
sondern
d
di
direkt
kt iinnerhalb
h lb d
der CPU und
d kö
können d
deshalb
h lb vom R
Rechenwerk
h
k di
direkt
kt
erreicht werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 18
Die wesentlichen Aufgaben des Steuerwerks sind
Der durchzuführende Befehl steht im Befehlsregister.
Die Adressen der benötigten
g
Daten stehen im Adressregister.
g
Die Adresse des nächsten Befehls steht im Register Befehlszähler.
1. Befehlsdecodierung:
Erkennen eines Programmbefehls und Einleiten der zu seiner Ausführung
notwendigen Funktionen.
2. Ablaufsteuerung:
Steuern der Reihenfolge der auszuführenden Programmbefehle.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 19
Typische Befehle sind
LOAD Laden eines CPU Registers mit einem Wert aus dem
Speicher
STORE Speichern eines Registerinhaltes in einem Speicherplatz
des Speichers
ADD, SUB, MUL, DIV Arithmetische Operationen auf Registern
NOT, OR, AND, XOR Logische Befehle auf Registern
COMPARE Vergleich des Inhalts zweier Register
IN OUT Ei
IN,
Ein- und
dA
Ausgabe
b von D
Daten
t an R
Register
i t d
der P
Periperiegeräte
i i
ät
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 20
Jeder dieser Befehle besitzt einen OpCode (Befehlsnummer).
Ein Programm besteht aus einer Folge von OpCodes.
Wird ein Programm ausgeführt, so wird die Programmdatei in den
Speicher geladen.
Die CPU übernimmt die Kontrolle und führt die den Opcodes
entsprechenden Befehle aus.
Ein internes Register, der Befehlszähler, zeigt immer auf den nächsten
auszuführenden Opcode.
Die CPU durchläuft dabei immer wieder den folgenden Zyklus
LOAD (Lade den Opcode, auf den der Befehlszähler zeigt)
INCREMENT (Erhöhe den Befehlszähler)
EXECUTE (Führe den Befehl, der zu dem Opcode gehört, aus)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 21
3. Koordination
Koordination sämtlicher Transporte auf den verschiedenen Bussystemen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 22
Das Rechenwerk
Besteht im Wesentlichen aus der ALU (Arithmetical Logical Unit).
Hier werden alle arithmetischen und logischen Operationen ausgeführt,
indem zwei Datenregister
g
miteinander logisch
g
verknüpft
p werden.
Von der Breite des Datenregisters leitet man die Bezeichnung des
Prozessors ab, z. B. ein 16 Bit Prozessor hat Datenregisterbreite von 16 Bit.
Beispiele:
8 Bit Prozessor: Intel 8086 (XT), 8051
16 Bit Prozessor: Intel 80286 (AT)
32 Bit Prozessor: Intel 80386, Motorola 68000
64 Bit Prozessor: Intel Itanium, AMD Athlon 64
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 23
Der Hauptspeicher
Wird als RAM (Random Access Memory) bezeichnet.
Er ist ein außerhalb der CPU befindlicher Speicher
p
für Daten und Programme.
g
Die Bits des Hauptspeichers sind byte- oder wortweise organisiert.
Jeder Befehl kann in Abhängigkeit von der Struktur des Prozessors auf ein
oder mehrere Byte zugreifen, um sie zu lesen, zu bearbeiten oder zu
schreiben.
Jedes Byte des Speichers erhält eine Adresse.
Auf jedes Byte kann direkt zugegriffen werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 24
Ein dynamischer Speicher ist der
Cache
Zusätzlicher Speicher zwischen dem Hautspeicher und den
Registern der Zentraleinheit, auf den besonders schnell zugegriffen
werden kann.
Im Normalfall bildet der Cache zusammen mit dem Prozessor ein
Bauteil.
Kleinere Programmstrukturen, die sich komplett im Cache befinden,
können so aus diesem deutlich schneller abgearbeitet werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 25
Das BUS System
Unterschieden wird zwischen internem und externem Bussystem.
Das interne Bussystem sorgt für den Datenaustausch innerhalb der
CPU.
Das externe Bussystem (Systembus) sorgt für den Datenaustausch
zwischen CPU und Hauptspeicher sowie CPU und Peripheriegeräte.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 26
Das externe Bussystem bzw. der Systembus besteht aus
Adressbus, Datenbus und Steuerbus.
•
Adressbus selektiert die Komponenten
•
Datenbus übermittelt die Daten
•
Steuerbus übernimmt Verwaltungsfunktion z. B. Umschalten von Lesen auf
Schreiben
Adressen / Adressbus
Steuerwerk
Befehle / Datenbus
Rechenwerk
Hauptspeicher
Daten / Datenbus
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 27
Die Bestandteile eines Rechnersystems
• Eingabeeinheit
• Verarbeitungseinheit
• Ausgabeeinheit
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 28
Peripherie
Die Gesamtheit der Eingabegeräte, Speichergeräte, Dialoggeräte und
Ausgabegeräte , d. h. alle Geräte außerhalb der Zentraleinheit bezeichnet
man als Peripherie
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 29
Dateneingabe-Geräte
•
•
•
•
Tastatur
Maus
Touchpad
Scanner etc.
Dateiausgabe-Geräte
•
•
Bildschirm
Drucker etc.
Schnittstellen
•
•
Netzwerk
Seriell, Parallel, USB
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 30
Massenspeicher / Festplatte
Speichern von großen Datenmengen
Köpfe, Zylinder, Sektoren, Spuren
Spur
Sektor
Spur 1023
Spur 0
Zylinder
Kopf
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 31
Organisation von Massenspeicher
Die Verwaltung der physikalischen Eigenschaften einer Platte wird durch
BIOS und Betriebssystem vollständig gekapselt.
Für den Benutzer erfolgt die Organisation von Festplatten in Verzeichnissen.
Die Organisation von Dateien erfolgt in Abhängigkeit vom Betriebssystem in
• Laufwerke (DOS/Windows)
• Verzeichnisse
• Unterverzeichnisse
Zum Einrichten von Verzeichnisstrukturen muß berücksichtigt werden
• Benutzerrechte,
Benutzerrechte Zugriffsrechte
• Sicherungskonzepte
• Backup-Strategien
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 32
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 33
Software in einem Rechnersystem
Unter Software versteht man alle Programme, Prozeduren und Objekte, die
ein Rechnersystem lauffähig machen.
Unterschieden wird zwischen Systemsoftware und Anwendungssoftware.
Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf
von Rechnern verantwortlich sind, wie BIOS und Betriebssystem.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 34
BIOS
Das BIOS – Basic IO System - enthält
•
g
grundlegende
g
Hilfsprogramme
p g
zur Ansteuerung
g von
Hardwarekomponenten (z. B. Tastatur, Maus, Festplatte)
•
Programme, die nach Einschalten des Rechners ausgeführt werden, wie
• Prüfung, welche Geräte angeschlossen sind,
• Funktionstest des Speichers
• Laden des Betriebssystems
•
Ist das BIOS in einem nicht flüchtigem Speicher (ROM oder EPROM) fest
im Gerät eingebaut, so spricht man auch von Firmware.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 35
Das Betriebssystem
Verwaltet die Ressourcen des Rechners und stellt Dienstleistungen zur
Verfügung.
Die zentralen Aufgaben des Betriebssystems sind
•
Ablaufsteuerung
Laden, Starten und Abarbeiten der Anwenderprogramme
•
Speicherverwaltung
z. B. Festlegung der vom Programm zu benutzenden Adressbereiche des
Hauptspeichers
•
Konfigurationsverwaltung
Erkennen aller angeschlossenen Peripheriegeräte
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 36
•
Ein- und Ausgabesteuerung
•
Prozessverwaltung
•
Zugriff und Verwaltung des Dateisystems
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 37
Die Anwendungssoftware
Anwendungsprogramme unterstützen den Anwender bei der
Lösung von Problemen.
Bsp: Textverarbeitungsprogramme, Tabellenkalulation etc.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 38
Zusammenfassung
Ein Computersystem besteht aus den Komponenten
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 39
2. Zahlendarstellung und mathematische Grundoperationen in
einem Rechnersystem
•
Zahlensysteme
•
Zahlenkonvertierung
•
Grundoperationen in den Zahlensystemen - Das Rechnen im Dualsystem
•
Subtraktion und Division mit Hilfe des Komplements
•
Darstellung von Ganzen- und Gleitkommazahlen im Rechner
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 40
Zahlensysteme
Der Wert einer Zahl im Dezimalsystem kann dargestellt werden in der Form
n
x    bi *10i , bi  0,1,2,3,4,5,6,7,8,9
im
Bsp:
345,23 = 3*102 + 4*101 + 5*100 + 2*10-1 + 3*10-2
Diese Darstellung nennt man Stellenwertsystem.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 41
Definition Stellenwertsystem
System zur Darstellung von Zahlen durch Ziffern, bei denen der Wert
einer Ziffer von der Stelle abhängt, an der sie innerhalb der Zahl
geschrieben ist.
Für den Wert einer Zahl z in einem Stellenwertsystem zur Basis B gilt
n
z    bi  B i , bi  0,1,2, , B  1
mit
B  IN , B  2
i m
m
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 42
Beispiel für einige Stellenwertsysteme
Zahlensystem
Dualsystem
Fünfersystem
Siebenersystem
Oktalsystem
Dezimalsystem
Hexadezimalsystem
Zahlenbasis
B=2
B=5
B=7
B=8
B=10
B=16
Ziffern
01
0,1
0,1,2,3,4
0,1,2,3,4,5,6
0,1,2,3,4,5,6,7
0,1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Beispiel
11000011
1240
366
303
195
C3
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 43
Binärsystem
Eine Menge, die nur aus zwei Zeichen besteht, z. B. Morsealpabet,
Fußgängerampel etc.
Das Dualsystem ist ein Spezialfall des Binärsystems.
Binärsystems
Für die interne Verarbeitung innerhalb eines Rechners wird das Dualsystem
benutzt.
Das Oktal- und Hexadezimalsystem sind ebenso wichtige Stellenwertsysteme,
da sie als abkürzende Schreibweise für Dualzahlen benutzt werden können.
Da 8=23 und 16=24, können jeweils 3 Dualziffern durch eine Oktalziffer und 4
Dualziffern durch eine Hexadezimalziffer ersetzt werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 44
Besteht die Gefahr der Verwechslung, wird das benutzte Stellenwertsystem
durch Zusätze markiert:
Dualsystem:
100100112
Oktalsystem:
2238
Dezimalsystem:
14710
Hexadezimalsystem:
9316
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 45
Vergleichstabelle
Dezimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dual
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
Oktal
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
Hexadezimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 46
Zahlenkonvertierung
Dezimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Die Umwandlung von Dual in Oktal oder
Dual in Hexadezimal und umgekehrt ist
sehr einfach.
Umwandlungstabellen
Dezimal
0
1
2
3
4
5
6
7
Dual
000
001
010
011
100
101
110
111
Oktal
0
1
2
3
4
5
6
7
Dual
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Hexa
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 47
Beispiel:
1 0 0 1 0 1 1 1 0 1, 1 0 1 0 0 1 12=X16
0 0 1 0 0 1 0 1 1 1 0 1, 1 0 1 0 0 1 1 0
2
5
D
A
6
Hi
Hinweis:
i
Die Umwandlung von Dezimalzahlen in Dual-, Oktal- oder
Hexadezimalzahlen ist auf diese einfache Art nicht möglich. Hierfür gibt es
Konvertierungsverfahren.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 48
Umwandlung von ganzen Zahlen im Dezimalsystem in eine Zahl beliebiger Basis
Beispiel:
232010=X8
a)
Z
Z div 8 Z mod 8
2320
?
?
b)
c)
d)
Z
2320
290
36
Z div 8
290
36
?
Z mod 8
0
2
?
Z
2320
290
Z div 8
290
?
Z mod 8
0
?
Z
2320
290
36
4
Z div 8
290
36
4
0
Z mod 8
0
2
4
4
Ergebnis: 232010= 44208
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 49
Umwandlung einer ganzen Zahl beliebiger Basis in eine Dezimalzahl
Verfahren:
Multipliziere die erste Ziffer (von links) der umzuwandelnden Zahl
mit ihrer Basis B
B, addiere dazu die nächste Ziffer
Ziffer, multipliziere das
Ergebnis erneut mit Basis B, usw.
Beispiel
44208=X10
4
B=8
4
32
36
2
288
290
0
2320
2320
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 50
Grundoperationen in den Zahlensystemen - Das Rechnen im
Dualsystem
Unsere üblichen Rechenverfahren sind allgemein für Stellenwertsysteme
gültig. Es wird sich zeigen, dass sich alle 4 Grundrechenarten im
Dualsystem auf die Addition zurückführen lassen.
Addition im Dualsystem
+
0
1
Additionsregeln 0
0
1
1
1 10
Beispiel für eine Addition
1 0 0 1 1 12 + 1 1 0 1 12 = ?
+
Übertrag
1 0
1
1 1
1 0 0
0
1
1
0
1
0
1
0
1 1
1 1
1
1 0
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 51
Multiplikation im Dualsystem
Multiplikationsregeln
*
0
1
0
0
0
1
0
1
Verfahren:
a.)) Verschiebe die zu multiplizierende
p
Zahl nach links
b.) Addiere die Zahlen
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 52
Beispiel für eine Multiplikation
1
Übertrag
0 0 1 1 0 *
0
1 0
1 0 0
0 0 0 0
1 0 0 1 1
1 1 1 1
1 1 0 1 0
1
0
0
1
0
0
1
0
0
0
1
1
0
1 1 0
0 0 0
1 0
0
0 1 0 0
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 53
Subtraktion im Dualsystem
Subtraktionsregeln
0
-0
0
Leihen 0
0
-1
1
1
1
-0
1
0
1
-1
0
0
Beispiel
1
Leihen
L
ih
Übertrag 1
0
1
1
1
0
1
0
0
1
1
0
Dieses Rechenverfahren ist für einen Computer nicht geeignet.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 54
Division im Dualsystem
Das schriftliche Divisionsverfahren kann analog zum Dezimalsystem benutzt
werden.
Di i i
Divisionsregeln
l
0 : 0 = verboten
0:1=0
1 : 0 = verboten
1:1=1
Dieses Rechenverfahren ist für eine elektronische Rechenanlage nicht
geeignet.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 55
Beispiel
11011101
- 10011
010001
- 000000
100010
10011
0011111
10011
011000
10011
001010
:
10011
=
1 0 1 1, 1 0 1....
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 56
Subtraktion und Division mit Hilfe des Komplements
Definition 2-Komplement einer Dualzahl
Das 2-Komplement einer Dualzahl ist die Ergänzung zur nächst höheren
Bit-Wertigkeit (=Zweierpotenz).
Bildungsrezept
Das 2-Komplement einer Dualzahl bildet man durch Invertieren (Ersetzen
von 0 durch 1 und umgekehrt) der Zahl und anschließender Addition
einer 1.
Beispiel: 2-Komplement zur Zahl 101012 (= 2110)
01010
+
1
0 1 0 1 1 (= 1110)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 57
Subtraktion durch Addition des Komplements
1. Schritt: Subtrahend durch Voranstellen von Nullen auf die gleiche
Stellenanzahl des Minuenden bringen
2. Schritt: Bilde das 2-Komplement des erweiterten Subtrahenden
3. Schritt: Addiere Minuend und das 2-Komplement des Subtrahenden.
Der Übertrag über die höchste vorgegebene Stellenanzahl wird nicht
berücksichtigt.
Beispiel: 1 0 1 0 1 12 - 1 0 0 0 1 2 (= 4310 - 1710) = 2610
S h itt 1 + 2
Schritte
S h itt 3
Schritt
010001
101110
+
1
101111
101011
+ 101111
1 011010
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 58
Division durch fortlaufende Addition des Komplements
Verfahren
1. Schritt: Divisor durch Voranstellen von Nullen auf die gleiche
Stellenanzahl des Dividenden bringen.
2. Schritt: Bilde 2-Komplement des erweiterten Divisors
3. Schritt: Addiere 2-Komplement zum Dividenden. Überträge über die
höchste Stellenzahl werden notiert, aber für die weitere Rechnung
zunächst nicht verwendet.
4. Schritt: Wiederhole Schritt 3 bis kein Übertrag mehr auftritt.
Das Ergebnis der letzten Addition, bei der es noch zu einem Übertrag
kam, ist der Divisionsrest. Die Übertragseinsen werden addiert und
bilden das Ergebnis der Division.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 59
Beispiel: 1 0 1 0 0 12 : 1 1 12 ( = 4110 : 710)
Schritte 1 + 2
Schritt 3
+
1
000111
111000
+
1
111001
+
1
+
1
+
1
+
1
+
101001
111001
100010
111001
011011
111001
010100
111001
001101
111001
000110
111001
111111
Ergebnis: 1 0 1 0 0 02 : 1 1 12 = 1 + 1 + 1 + 1 + 1 Rest 110 = 1 0 1 Rest 110
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 60
Informationsdarstellung / Codierung
Computer können intern nur Bits verarbeiten.
Daher muss jedes Zeichen in eine Bitfolge umgewandelt werden.
Unter einem Zeichen versteht man Buchstaben, Ziffern (z. B. „0“, „1“),
Sonderzeichen (z. B. „$“, „€“,…) und Steuerzeichen (z. B. „\n“ für
Zeilenumbruch)
Das Ersetzen eines Zeichens in eine Bitfolge nennt man Codierung.
Die Umwandlungsvorschrift ist ein Code.
Es wurden eine Reihe von Computercodes entwickelt.
Beispiele hierfür sind der ASCII-Code sowie der Unicode.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 61
ASCII-Code
American Standard Code for Information Interchange
7- Bit Code, d. h. 27=128 Zeichen sind darstellbar, davon
•
32 Steuerzeichen
(ASCII 0 bis ASCII 31 entspricht Tastenkombination Ctrl-A bis Ctrl-Z, z. B.
Ctrl-H Backspace, Ctrl-M Return),
•
84 internationale Schriftzeichen (lateinisches Alphabet, Ziffern,
Sonderzeichen),
•
12 nationale Schriftzeichen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 62
Addition der Zeile und Spalte ergibt den ASCII-Wert des entsprechenden
Zeichens, z. B. ASCII 52 = 4.
Bei der ASCII-Codierung werden nur 7 Bits eines Bytes benutzt,
das achte Bit dient als Kontrollbit für die Datenübertragung.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 63
ASCII-Erweiterung
Erweiterung des ASCII-Satzes auf 8-Bit Code,
d. h. 28 = 256 Zeichen sind darstellbar.
Somit ergibt sich ein weiterer verfügbarer Bereich von
ASCII 128 bis ASCII 255.
IBM-PCs sowie dazu kompatible Rechner benutzen diesen zusätzlichen
Code zur Darstellung von sprachspezifischen Zeichen,
wie z. B. „ä“ (ASCII 132), „ö“ (ASCII 148).
Bemerkung:
Es kann zu Problemen beim Datenaustausch zwischen Rechnern mit
unterschiedlicher ASCII-Erweiterung kommen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 64
Unicode
•
16-Bit Code, d. h. er umfasst 216 = 65536 Zeichen
•
umfasst Schriftzeichen aller Verkehrssprachen der Welt
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 65
Zahlendarstellung im Rechner
Darstellung ganzer Zahlen (Datentyp INTEGER)
•
Kö
Können
direkt
di kt iin D
Dualzahlen
l hl umgewandelt
d lt werden
d
•
Werden in ihrer Bitdarstellung gespeichert und verarbeitet
Die meisten Programmiersprachen unterscheiden zwischen
Short Integer: Speicherlänge 2 Byte (=16 Bits)
Long Integer: Speicherlänge 4 Byte (= 32 Bits)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 66
Mit 2 Bytes können 216 verschiedene Zahlen dargestellt werden,
mit 4 Bytes 232 verschiedene Zahlen.
g
Bereiche von Integer
g Zahlen darstellen:
Daher lassen sich folgende
Short Integer Zahlen von –215 bis 215-1
Long Integer Zahlen von
–231
bis
231-1
(-32768 bis 32767)
(-2147483648 bis 2147483647)
Die positiven ganzen Zahlen werden direkt in ihrer Bitdarstellung gespeichert
(bei Short Integer von 0000 0000 0000 0000 bis 0111 1111 1111 1111).
Das vorderste Bit ist hier immer 0.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 67
Die negativen ganzen Zahlen werden abgespeichert als 2-Komplement
ihres Betrages.
Beispiel
Für Short integer hat –1 die Darstellung 1111 1111 1111 1111
Der Zahlenbereich bei Short Integer erstreckt sich also von
1111 1111 1111 1111 bis 1000 0000 0000 0000
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 68
Standardformate für die Darstellung ganzer Zahlen
Bereich
-128..127
-32768..32767
32768 32767
-231..231-1
-263..263-1
Format
8 Bit
16 Bit
32 Bit
64 Bit
Java
byte
short
int
long
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 69
Darstellung von Kommazahlen (Datentyp REAL)
Alle Zahlen Z dieses Typs werden im Rechner in der Gleitpunktdarstellung
(Gleitkommadarstellung) dargestellt:
Z = V * M * BE
mit V: Vorzeichen, E: Exponent, M: Mantisse, B: Basis
Beispiel
75 = 75*10
75 100 = 7,5
7 5*10
101 = 0,75
0 75*10
102 = ...
- 0,36 = - 0,36* 100 = - 3,6*10-1= - 36*10-2=...
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 70
Eigenschaften der Gleitpunktdarstellung
•
Die Gleitpunktdarstellung ist eine Methode zur näherungsweisen
Darstellung von reellen Zahlen.
•
Sie ist eine Darstellung, die bei festem Bitformat
- ein möglichst großes Intervall der reellen Zahlen umfasst und
- deren Genauigkeit bei kleinen Zahlen sehr hoch, bei großen Zahlen
niedrig ist.
•
In einer Rechenanlage werden Mantisse und Exponent im Dualsystem
dargestellt.
•
REAL-Zahlen werden im Rechner meist in 32 (short real, float)
oder 64 Bits (long real, double) abgespeichert:
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 71
Damit Gleitkommazahlen in einer Rechenanlage eine eindeutige
Darstellung haben, werden sie normiert dargestellt.
Eine zur Basis 2 normierte Gleitkommazahl ist eine Zahl, bei der der
Exponent so gewählt wird, dass die Zahl in der Form
1, m1m2m3….mn*2E
dargestellt werden kann.
Beispiel: 10,01 = 1,001 * 21
Bemerkung:
Bei der Verwendung normierter Gleitkommazahlen muss die 1 vor dem
Komma nicht gespeichert werden, da sie immer vorhanden ist.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 72
IEEE-Norm (Institute of Electrical and Electronics Engineers)
Mitte der Achtzigerjahre wurde vom Institute of Electrical and Electronics
Engineers die sog. IEEE-Norm verabschiedet, die mittlerweile Standard in den
meisten Rechnern ist.
Für Exponent und Mantisse sind hierbei eine feste Bitanzahl vorgegeben
vorgegeben.
Exponent
v
Mantisse
e
m
short real (32 Bits): Vorzeichen: 1Bit, Exponent: 8 Bit, Mantisse:23 Bit
long real (64 Bits): Vorzeichen: 1Bit, Exponent: 11 Bit, Mantisse:52 Bit
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 73
Das Vorzeichenbit
Das erste Bit (engl.. most significant bit) wird als Vorzeichenbit interpretiert.
0 = positiv, 1 = negativ
Die Exponentenbits (für short real)
Die nächsten acht Bits codieren den Exponenten e.
Mit 8 Bits können maximal 28 = 256 verschiedene Exponenten codiert werden.
Damit können Zahlen im Bereich von –127 bis 128 dargestellt werden.
Damit das Vorzeichen des Exponenten nicht gespeichert werden muss, wird zum
Exponenten + 127 addiert, so dass der Exponent aus Zahlen von 1 bis 254
besteht.
0 und 255 sind für betragsmäßig sehr kleine Werte sowie „Unendlich“ reserviert.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 74
Die Mantissenbits (für short real)
Die restlichen 23 Bits dienen zur Codierung der Mantisse.
Die Mantisse wird normiert dargestellt, wobei die 1 vor dem Komma nicht
mitgespeichert wird.
Damit entspricht eine short real Codierung der Zahl
für e   0;255 
Z = (-1)v * 1,m * 2e-127
Bemerkung: Die 64 Bit Codierung von long real erfolgt analog. Es gilt
Z = (-1)v * 1,m * 2e-1023
für e   0;2047 
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 75
Sonderfälle
e
m
Gleitkommazahl Z
0
0
0
0
-1v * 0
255
0
-1v * ∞
255
0
-1v*0,m * 21-127
NaN
NaN = Not a Number, d. h. nicht definiert
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 76
Beispiel: 4,75 als IEEE Zahl (short real)
4,75 = 100,11
29 28 27 26 25 24 23 22
21 20 2-1 2-2 2-3 2-4 2-5 2-6
,
1
Normieren ergibt:
1,0011*22
1
,
0
0
1
1
1
1
0
Exponent mit 127 addieren: 127+2 = 129 = 10000001
Damit ergibt sich
IEEE Zahl: 0 10000001 00110000000000000000000
Beachte: Bei der Mantisse wird die 1 vor dem Komma nicht mitgespeichert.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 77
Beispiel: gegeben sei IEEE Zahl (short real)
1 10000101 10110000000000000000000
gesucht: zugehörige Dezimalzahl
Exponent = 10000101 = 13310 => Exponent - 127 = 6
Also entspricht die IEEE Zahl der Dezimalzahl
- (1* 20 + 1* 2-1 + 0*2-2+1*2-3+1*2-4)*26= -108
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 78
3. Grundlagen der Boolesche Algebra
•
Definition
•
Grundlagen der Schaltalgebra
•
de Morgansche Gesetze
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 79
Die boolesche Algebra wurde von dem Engländer George Boole 1854 entwickelt.
Ziel: Zweifelsfreie Feststellung der Wahrheit oder Falschheit von Aussagen.
Die Boolesche Algebra kennt zwei zulässige Zustände
wahr =
logisch 1 =
nicht wahr = logisch 0 =
Spannung vorhanden
keine Spannung
Sie beruht auf drei Basisoperationen
Negation
NICHT-Funktion
Konjunktion
UND-Funktion
Disjunktion
ODER-Funktion
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 80
Definition Boolesche Algebra

Eine Menge M mit zwei Verknüpfungen und + heißt boolesche Algebra,
wenn für alle x, y, z
 M gilt:
Assoziativgesetz

 
x (y z) = (x y) z
x + (y+z) = (x+y) + z
Kommutativgesetz


x y=y x
x+y = y+x
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 81
Verschmelzungsgesetz oder Absorptionsgesetz

x (x+y) = x

x + (x y) = x
Distributivgesetz



x (y+z) = (x y)+(x z)


x+(y z) =(x+y) (x+z)

es gibt ein Element 0  M mit 0  x = 0 und 0 + x = x für alle x  M
es gibt ein Element 1  M mit 1 x = x und 1 + x = 1 für alle x M
neutrales Element bzgl. + und
komplementäres Element
zu jedem x M existiert genau ein y
 M mit x  y = 0 und x + y = 1
Seite 82
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Grundlagen der Schaltalgebra
Die Schaltalgebra ist eine Anwendung der booleschen Algebra zur
Beschreibung und Untersuchung logischer Schaltungen.
M sei eine Menge mit zwei Elementen
Elementen, die mit 0 und 1 oder O und L bezeichnet
werden.
Es gibt drei Basis-Verknüpfungen
Disjunktion
oder ODER-Funktion
mit den Symbolen + bzw.
Konjunktion
oder UND-Funktion
mit den Symbolen bzw.
Negation
oder NICHT-Funktion
mit den Symbolen


 bzw. &
bzw.

bzw.
Die DIN 40700 legt Schaltzeichen für die logischen Funktionen fest.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 83
Disjunktion bzw. ODER-Funktion

Die Disjunktion beschreibt eine logische ODER-Verknüpfung

Gleichung:
A = E1  E2 bzw.
bzw A = E1 + E2

Der Ausgang ist dann "wahr", wenn entweder E1 oder E2 "wahr" sind.
Wahrheitstabelle
E1 E2
0 0
0 1
1 0
1 1
A
0
1
1
1
Schaltzeichen
E1
E2

A
Parallelschaltung
E1 
S1
U0> 0


E2 

S2

R
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 84
Konjunktion bzw. UND-Funktion

Die Konjunktion beschreibt eine logische UND-Verknüpfung

Gleichung:
A = E1 & E2 bzw. A = E1  E2 bzw. A = E1 E2 bzw. A = E1 E2

Wenn beide Eingänge "wahr" sind, dann ist auch der Ausgang "wahr"

U0> 0

Wahrheitstabelle
E1 E2
0 0
0 1
1 0
1 1
Reihenschaltung
Schaltzeichen
A
0
0
0
1
E1
E2
&
A
E1

S1
E2

S2

A
R
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 85
Negation bzw. NOT-Funktion

Die Negation beschreibt eine logische NICHT-Verknüpfung

Gleichung:
A = E bzw. A =

E
bzw. A = E
Wenn der Eingang "wahr" ist, dann ist der Ausgang "falsch"
Wahrheitstabelle
E
0
1
A
1
0
Schaltzeichen
E
1

A
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 86
Weitere Verknüpfungen

NOT AND bzw. NAND
Wahrheitstabelle
Gleichung

A = E1 E2

NOT OR bzw. NOR
Gleichung: A = E1 + E2
E1 E2
0 0
0 1
1 0
1 1
A
1
1
1
0
E1 E2
0 0
0 1
1 0
1 1
A
1
0
0
0
Schaltzeichen
E1
&

A
1

A
E2
E1
E2
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 87
Weitere Verknüpfungen

Antivalenz (Exklusives ODER) bzw. EXOR
Gleichung
Wahrheitstabelle
A = E1 E2 = E1E2 + E1E2

E1 E2
0 0
0 1
1 0
1 1
Äquivalenz (Gleichheit) bzw. EXNOR
Gleichung: A = E1E2 + E1E2
E1 E2
0 0
0 1
1 0
1 1
A
0
1
1
0
A
1
0
0
1
Schaltzeichen
E1
E2
E1
E2
=1
A
=
A
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 88
Einige Rechengesetze für beliebige boolesche Ausdrücke
de Morgansche Gesetze
i) A  B 
ii ) A  B 
A  B
A  B
weitere Gesetze
iii ) A  A  A
iv ) A  A  A
v ) A  B  A  B  B
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 89
4. Erstellung von Software – Anwendungsprogrammierung
Definition
Ein Programm ist eine Folge von Befehlen oder Anweisungen an eine
EDV-Anlage zur automatischen Bearbeitung eines Problems.
Zur Erstellung eines Programms sind die folgenden Komponenten
von Bedeutung: Editor, Compiler, Linker, Loader
Editor
• Erzeugt lesbare Textdateien in der jeweiligen Programmiersprache
Assembler
A
bl
• Maschinenorientierte Programmiersprache
Zur Übersetzung des Quellcodes in die Maschinensprache des Rechners gibt
es zwei Typen von Übersetzungsprogrammen: Compiler und Interpreter
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 90
Interpreter
•
Übersetzt immer nur eine einzige Programmanweisung in Maschinensprache
•
Jeder übersetzte Befehl wird sofort ausgeführt
•
Die Übersetzung wird nicht abgespeichert
Compiler
•
Übersetzt immer einen kompletten Programmtext in eine Folge von
Maschinenbefehlen, bevor die erste Programmanweisung ausgeführt wird
•
Erzeugt aus dem Quellcode durch einen Übersetzungsvorgang den
sogenannten Objektcode.
•
Überprüft auf Grammatik- oder Syntaxfehler
•
Objektcode enthält binären Code für einen speziellen Prozessor für ein
bestimmtes Quellcode-Modul
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 91
Linker
•
Führt nach dem Compilieren mehrere unabhängige Programmteile
eines Softwareprojektes zu einem Gesamtprojekt zusammen
•
Hinzufügung benötigter mathematischer oder anderer allgemeiner
Programmteile aus Softwarebibliotheken
•
Erzeugt aus den Objektcode des Programmierers und dem
Objektcode der Bibliothek ausführbaren Programmcode.
Loader
•
Lädt das Programm an eine freie Position im RAM
•
Funktion wird in der Regel durch das Betriebssystem bereitgestellt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 92
Zur Entstehung eines lauffähigen Compiler-Programms sind also
folgende Schritte notwendig:
Editor
Quellcode
Compiler
Objektcode
Objektcode
Bibliothekscode
Linker
Programmcode
Lauffähiges
Programm
im Speicher
Loader
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 93
Hilfsmittel zur Softwareentwicklung sind:
Debugger
•
System zur Identifizierung von logischen u. Laufzeit - Fehlern
•
Debugger drängen sich zwischen Betriebssystem und Programm und
übernehmen die Steuerung und Kontrolle der Programmausführung
Programmausführung.
IDE - Integrated Development Environment
•
Entwicklungsumgebung, die sämtliche Schritte der
Programmentwicklung von einer gemeinsamen Entwicklungsoberfläche
möglich macht.
macht
•
Ermöglicht die graphische Entwicklung von Software
•
Verbirgt die Komplexität der Entwicklung
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 94
Programmiersprachen – Übersicht (Auswahl)
Fortran
1960
ALGOL
Basic
Lisp
1965
COBOL
PL/1
Simula
1970
Pascal
C
1975
1980
Modula 2
Ada
1985
Object Pascal
1990
1995
Ada 95
Prozedurale
Sprache
ABAP
C++
Delphi
2000
Prolog
Smaltalk
CLOS
JAVA
Objektorientierte Sprache
KI Sprache
Business
Sprache
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 95
4. Softwareentwicklung mit JAVA
•
Grundlagen von JAVA
•
Datentypen
•
Kontrollstrukturen
•
Methoden
•
Grundlagen der Objektorientierung
•
Klassen, Objekte
•
Zugriffschutz
•
Kapselung
•
Vererbung
•
Ausnahmebehandlung
•
Die Klassen Object, String, StringBuffer
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 96
Kurze Einführung in die Geschichte von JAVA
•
JAVA wurde ab 1991 von der Firma Sun Microsystems entwickelt.
•
Zu Beginn erfolgte die Entwicklung im Rahmen eines internen
Forschungsprojektes mit dem Ziel, eine Programmiersprache zur
Steuerung von Geräten der Haushaltselektronik zu entwickeln.
•
Hauptziel der Programmiersprache: klein, schnell, effizient und leicht
portierbar für einen breiten Bereich von Hardware.
•
Die Programmiersprache erhielt den Namen JAVA (nach der
gleichnamigen Kaffeesorte).
•
1993 sollte Projekt abgebrochen werden, da sich Markt für intelligente
Haushaltsgeräte nicht gut entwickelte.
•
Zu dieser Zeit etablierte sich das World Wide Web (WWW).
•
Sun erkannte Potential in JAVA und das Projekt wurde fortgeführt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 97
Das Arbeitsprinzip von JAVA
•
Der Source Code eines JAVA-Programms steht in einer Textdatei mit der
Endung .java
•
Von einem Compiler mit dem Namen javac wird anhand dieser Text-Datei eine
Datei mit der Endung .class erzeugt.
•
Diese Datei enthält den so genannten Bytecode, der auf einer virtuellen
Maschine (JVM) läuft. Dies ist ein Interpreter, der für jedes Betriebssystem den
Bytecode in den RAM des Rechners lädt und das Programm ablaufen lässt.
•
Die virtuelle Maschine wird durch den Befehl java aufgerufen und führt den
Bytecode aus.
•
Die JVM ist Teil der JAVA Runtime Environment (JRE), die es für jedes gängige
Betriebssystem gibt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 98
Eigenschaften von JAVA
Definition der Firma Sun Microsystems (jetzt: Oracle):
JAVA ist eine einfache, objektorientierte, verteilte, interpretierte, stabile, sichere,
plattformunabhängige portierbare,
plattformunabhängige,
portierbare leistungs
leistungs- und multithreadingfähige und
dynamische Sprache.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 99
Voraussetzung für das Arbeiten mit JAVA
•
Zur Erstellung von JAVA-Programmen benötigt man die JAVA 2 SDKUmgebung für das entsprechende Betriebssystem.
•
SDK = Software Development Kit (= JDK, JAVA Development Kit)
•
Das SDK beinhaltet die notwendigen Programme, insbesondere den
Compiler javac, den Interpreter java und die Virtuelle Maschine.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 100
Labor für Informatik –
Wo findet man …
… die JAVA Software Entwicklungs-Umgebung
g
g
g (JAVA SE JDK)!?
http://www.oracle.com/technetwork/java/index.html
(kostenlos, keine Anmeldung erforderlich, aktuell: JAVA SE JDK 7)
… die Dokumentation (JAVA API) zum JAVA SE JDK!?
http://www.oracle.com/technetwork/java/index.html
(kostenlos, keine Anmeldung erforderlich, kann als zip-Archiv
runtergeladen werden)
… einen Text-Editor (Notepad++)!?
http://notepad-plus-plus.org
(kostenlos, mit Syntax-Highlighting für verschiedene Programmiersprachen)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 101
Erstellung von JAVA-Programmen
JAVA Programme werden als Text in Dateien eingegeben.
Hierzu benutzt man entweder
•
einen Texteditor oder
•
eine integrierte Entwicklungsumgebung (IDE Integrated Development
Environment).
Wir werden in der Vorlesung und im Praktikum mit einem Texteditor arbeiten.
Das JDK werden wir in der aktuellen Version 7 verwenden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 102
Die vier Programmarten von JAVA
•
Applikationen (engl. für Anwendung)
eigenständiges Programm, das nur die virtuelle Maschine als Interpreter
braucht und selbstständig lauffähig ist (wie in anderen
Programmiersprachen üblich)
•
Applets (engl. für „kleine Applikation“)
Unterprogramm eines Webbrowsers,
Webbrowsers welcher die virtuelle Maschine als
Interpreter braucht.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 103
•
Servlets
Unterprogramm eines Webservers (Gegenstück zu einem Applet auf dem
Webclient = Browser)
• erweitert die Funktionalität eines Webservers
• mögliche Anwendungen: sichere und vertrauliche Zugänge zu einer
Website, Zugriffe auf Datenbanken, dynamische Erstellung von HTMLSeiten
• eng verwandt: JSP (JAVA Server Pages), d. h. HTML-Seiten, in die
JAVA-Programme eingebettet sind, welche bei Aufruf auf dem Server
ausgeführt werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 104
•
Midlets (MID = mobile information device)
JAVA-Programm, das auf Mobilgeräten wie Handys oder Handhelds
ablaufen kann.
• ist geeignet für Geräte mit wenig Speicher, geringer Performanz,
t
temporären
ä
V
Verbindungen
bi d
zum N
Netz
t
• Spezielle Entwicklungsumgebung von SUN: J2ME (JAVA 2 Micro
Edition), benötigt J2SDK
• Abgespeckte Virtuelle Maschine KVM (K für kilo, da der benötigte
Speicher im Kilobyte Bereich liegt)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 105
Labor für Informatik –
Literaturhinweise
C. Ullenboom: "JAVA ist auch eine Insel"
10. Auflage, 2011, Galileo Computing
ISBN 978 – 3 – 8362 – 1802 – 3
Kennung Hochschulbibliothek: FJ 5
C. Heinisch, F. Müller-Hofmann, J. Goll: "JAVA als erste
Programmiersprache"
g
p
5. Auflage, 2007, B. G. Teubner Verlag
ISBN 978 – 3 – 8351 – 0147 – 0
Kennung Hochschulbibliothek: FJ 128
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 106
Labor für Informatik –
Literaturhinweise
D. Abts: "Grundkurs JAVA"
5. Auflage, 2008, Vieweg Verlag
ISBN 978 – 3 – 8348 – 0417 – 4
Kennung Hochschulbibliothek: FJ 262
U. Grude: "JAVA ist eine Sprache"
1. Auflage, 2005, Vieweg Verlag
ISBN 978 – 3 – 528 – 05914 – 9
Kennung Hochschulbibliothek: FJ 272
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 107
Labor für Informatik –
Literaturhinweise
D. Ratz,, J. Scheffler,, D. Seese,, J. Wiesenberger:
g
"Grundkurs Programmieren in JAVA"
5. Auflage, 2010, Hanser Verlag
ISBN 978 – 3 – 446 – 41655 – 0
Kennung Hochschulbibliothek: FJ 85
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 108
Links
• JAVA Tutorial von Oracle
http://download.oracle.com/javase/tutorial
• G. Krüger, T. Stark: Handbuch der JAVA-Programmierung
http://www.javabuch.de
• C. Ullenboom: JAVA ist auch eine Insel (online)
http://openbook.galileocomputing.de/javainsel
• S.
S Middendorf,
Middendorf R.
R Singer,
Singer J.
J Heid: Programmierhandbuch und Referenz
http://www.dpunkt.de/java
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 109
Einfache JAVA-Applikationen
// Willkommen.java
/*
Ausgabe eines Textes
*/
class Willkommen{
public static void main (String args[]){
System.out.println ("Willkommen zur JAVA-Vorlesung");
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 110
Was sind die Schritte, um die Applikation zu starten?
1. Erstellen der Datei Willkommen.class im Bytecode:
javac Willkommen.java
2
2.
java Willkommen führt zur Ausführung des Programms
Das Ergebnis ist die Ausgabe des Textes
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 111
Grundbestandteile eines JAVA-Programms
1. Ein JAVA Programm ist stets eine Klasse und beginnt mit dem
Schlüsselwort class und dem Namen der Klasse.
2. Ein JAVA-Programm ist in Einheiten gepackt, so genannte Blöcke, die von
geschweiften Klammern {...} umschlossen sind.
3. Der Startpunkt jeder Applikation ist die Methode main(). Hier beginnt der
JAVA-Interpreter (die „virtuelle Maschine“) die einzelnen Anweisungen
auszuführen. Abgearbeitet wird sequenziell, d. h. der Reihe nach.
4. Die Applikation Willkommen.java besteht aus einer Anweisung, der
Ausgabe eines Textes.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 112
Kommentare
Kommentare dienen zur Dokumentation von Programmen und Verbessern ihre
Lesbarkeit. Sie bewirken keine Aktion bei der Ausführung des Programms und
werden vom JAVA-Compiler ignoriert.
Es gibt drei verschiedene Arten, Kommentare in JAVA zu erstellen.
1. //.. einzeiliger Kommentar, beginnt mit dem Doppelslash // und endet
mit dem Zeilenende (Quellcode, der in derselben Zeile vor dem
Doppelslash steht, wird normal verarbeitet)
2. /*...*/ Kommentierung von mehreren Textzeilen
3. /**...*/ Dokumentationskommentar zur automatischen Dokumentation
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 113
Empfehlung:
Jedes Programm sollte mit einem Kommentar beginnen, der den
Klassennamen beinhaltet, die Version, das Datum und den Zweck des
Programms beschreibt.
/
/*
*Classname
*
*Versioninformation
*
*Date
*
*Copyrightnotice
*/
Leerzeilen, Leerzeichen und Tabstops werden vom JAVA-Compiler nicht
verarbeitet. Sie sollten verwendet werden zur Strukturierung und Lesbarkeit des
Programms.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 114
Die Klassendeklaration
•
Jedes JAVA-Programm besteht aus mindestens einer Klasse
•
Das reservierte Wort class eröffnet die Klassendeklaration in JAVA,
gefolgt von dem Klassennamen (in unserem ersten Beispiel Willkommen)
•
Reservierte Wörter sind von JAVA belegt (nur kleine Buchstaben)
•
Der Klassenname ist ein Identifier (Bezeichner)
•
Ein Bezeichner darf nicht mit einer Ziffer beginnen und keine Leerzeichen
enthalten
•
Ein Identifier ist eine Folge von alphanumerischen Zeichen, d. h.
Buchstaben, Ziffern, dem Unterstrich_ und dem $ Zeichen
•
JAVA ist case sensitive, d. h. Groß- und Kleinschreibung wird unterschieden
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 115
Regeln für das Erstellen einfacher Applikationen
Speichern Sie zunächst Ihre Klasse in einer Datei ab, die genau so heißt, wie
die Klasse mit der Erweiterung „.java“.
E gilt
Es
ilt ffolgende
l
d K
Konvention:
ti
Klassennamen beginnen mit einem Großbuchstaben und bestehen aus einem
Wort.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 116
Blöcke
•
Die Deklaration einer Klasse geschieht in einem Block, der durch
geschweifte Klammern {} umschlossen ist
•
Innerhalb eines Blockes können sich noch weitere Blöcke befinden
•
Die Klammern müssen korrekt geschlossen sein.
Zwei Konventionen sind üblich
class Willkommen
{
....
}
oder die bei JAVA bevorzugte Konvention
class Willkommen {
.....
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 117
Die Methode main
•
Die zentrale Einheit einer Applikation ist die Methode main.
•
Durch sie wird die Applikation gestartet, durch die dann alle Anweisungen
ausgeführt werden, die in ihr programmiert sind.
•
Die Zeile public static void main ( String args[] )
ist Teil jeder JAVA-Applikation.
•
JAVA-Applikationen beginnen automatisch bei main.
•
Die runden Klammern hinter main() zeigen an, dass main eine Methode
ist
ist.
•
Nach dem Aufruf der Methode main mit dem Standardargument String
args[] kommt der Methodenrumpf, eingeschlossen durch geschweifte
Klammern ({...}).
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 118
Eine allgemeine Applikation in JAVA muss in jedem Fall die folgende
Konstruktion beinhalten
class Klassenname {
public static void main( String args[] ){
Deklarationen und Anweisungen;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 119
Erweiterung der ersten JAVA-Applikation
/*
Ausgabe eines Textes in einem Dialogfenster
*/
import javax
javax.swing.JOptionPane;
swing JOptionPane;
class Willkommen2{
public static void main (String args[]){
JOptionPane.showMessageDialog (null,
"Willkommen zur \nJAVA-Vorlesung");
System.exit( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 120
Die Ausgabe erfolgt dann in einem Dialogfenster,
das durch das Klicken des OK Buttons geschlossen werden kann
kann.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 121
Die Methode System.exit
•
Die Methode exit() gehört zur Klasse System und beendet die
Applikation bei Dialogfenstern.
•
Die Klasse System gehört zu dem Paket java.lang, das automatisch
jedem JAVA-Programm zur Verfügung steht.
•
Wird diese Anweisung bei Dialogfenstern nicht angegeben, so blockiert die
Applikation die JAVA Virtual Maschine.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 122
Die import-Anweisung
•
Benutzt man Klassen aus anderen Paketen als dem Paket java.lang, so
muss diese Klasse ausdrücklich mit ihrem Paketpfad angegeben werden.
•
import Anweisung wird die Klasse JOptionPane eingelesen und für
Mit der import-Anweisung
das Programm benutzbar.
• JOptionPane ist eine Standardklasse von JAVA aus dem Paket
javax.swing und stellt Dialogboxen, d. h. Fenster zur Ein-und Ausgabe
zur Verfügung.
•
JAVA Kl
JAVA-Klassen
können
kö
generellll iin Paketen,
P k t
d h
d.
h. iin V
Verzeichnissen
i h i
bereitgestellt werden. Z.B. sind alle Klassen des Swing-Pakets
javax.swing in dem Verzeichnis \javax\swing zu finden
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 123
•
Die Methode showMessageDialog() öffnet eine Dialogbox, die den in
Hochkommata eingeschlossenen Text anzeigt, der an zweiter Stelle, d. h.
nach dem reservierten Wort null steht.
• null ist ein reserviertes Wort. null ist der Bezeichner für ein nicht
vorhandenes Objekt. In unserem Fall bewirkt es, dass ein Standard-Frame
benutzt wird, der zentriert auf der Mitte des Bildschirms erscheint. (Mit der
Erstellung von Frames beschäftigen wir uns im zweiten Semester).
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 124
Escape-Sequenzen und Strings
•
Der in Anführungszeichen (" ") gesetzte Text ist ein String, d. h. eine Kette
von beliebigen Zeichen
•
Strings sind in JAVA vom Datentyp String
St i
•
Strings werden z. B. durch die Methoden System.out.println() oder
JOptionPane.showMessageDialog() auf dem Bildschirm exakt so
ausgegeben, wie eingetippt- bis auf die sogenannten Escape-Sequenzen:
•
Eine Escape-Sequenzen ist ein Hilfsmittel zur Darstellung nicht druckbarer
Zeichen und wird durch den Backslash (\) gefolgt von genau einem
weiteren Zeichen, z. B. \n für einen Zeilenwechsel, geschrieben.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 125
Escape-Zeichen
Bedeutung
\n
neue Zeile (new line)
\t
führt Tabulatorsprung aus (tab)
\r
positioniert den Cursor an den Anfang der aktuellen
Zeile (carriage return)
\b
positioniert den Cursor ein Zeichen zurück (backspace)
\f
Seitenvorschub (neue Seite) (form feed)
\\
A
Ausgabe
b d
des B
Backslash
k l h\
\"
Ausgabe der Anführungszeichen
\‘
Ausgabe der Hochkomma
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 126
Anmerkung zu den Escape-Sequenzen
Die Escape-Sequenzen \t, \f, \r und \b werden von der Methode
showMessageDialog() nicht beachtet.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 127
Programmier-Styleguide
Als Programmierstil hat sich durchgesetzt:
Variablennamen
Kleinbuchstaben
variable
Methodennamen
Kleinbuchstaben
methode( )
Klassennamen
1. Buchstabe groß, Rest klein
Willkommen
Aus mehreren Wörtern zusammengesetzte Namen werden ohne Unterstrich
geschrieben, dabei wird ab dem zweiten Wort jeweils der erste Buchstabe
eines Wortes groß geschrieben. Für das erste Wort gilt die normale
Konvention.
Beispiel: dritteWurzel
addiereWerte ( )
Variable
Methode
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 128
Reservierte Schlüsselwörter
Bestimmte Wörter sind als Bezeichner nicht zulässig, da sie als
Schlüsselwörter durch den Compiler besonders behandelt werden.
p
eines Compilers.
p
Schlüsselwörter bestimmen die „„Sprache“
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 129
Folgende Schlüsselwörter gibt es in JAVA:
abstract, boolean, break, byte, case, catch, char, class,
const1, continue, default, do, double, else, extends,
final,
, finally,
y, float,
, for,
, g
goto1, if,
, implements,
p
, import,
p
,
instanceof, int, interface, long, native, new, package,
private, protected, public, return, short, static,
strictfp,super, switch, synchronized,this, throw,
transient, try, void, volatile, while.
1:
Diese Schlüsselwörter sind reserviert, werden aber nicht benutzt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 130
String Addition
Strings können durch den Verkettungsoperator + verknüpft werden.
Durch diesen Operator werden zwei Strings aneinander gereiht.
Im nächsten Beispiel werden zwei einzugebende Strings aneinander gefügt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 131
// StringAddition.java
//Fuehrt zwei einzugebende Strings zusammen
import javax.swing.JOptionPane;
class StringAddition {
public static void main(String args[]){
String ersteEingabe, zweiteEingabe;
String ausgabe;
//Einlesen des ersten Textes:
ersteEingabe = JOptionPane.showInputDialog("Geben
Sie einen Text ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben
Sie einen zweiten Text ein");
//Zusammenfuehrung beider Texte
ausgabe = ersteEingabe + zweiteEingabe;
//Ausgabe des zusammengefuegten Textes
JOptionPane.showMessageDialog(null, ausgabe, "Ergebnis",
JOptionPane.PLAIN_MESSAGE);
System.exit( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 132
Die Ein- und Ausgabe erfolgt dann in folgenden Dialogfenstern
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 133
Eingabedialoge
Die Methode JOptionPane.showInputDialog mit dem String("Geben
Sie einen Text ein")erzeugt das folgende Fenster:
Der Anwender muss einen String eingeben, der mit der Return-Taste oder mit
einem Mausklick auf den OK-Button beendet wird.
Über de
Übe
dem Eingabefeld
gabe e d e
erscheint
sc e t de
der Text,
e t, de
der de
der Methode
et ode im Programm
og a
mitgegeben wurde.
Der eingegebene String wird durch die Methode an das Programm zurück
gegeben.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 134
Ausgabe-Dialoge
Die Methode
JOptionPane.showMessageDialog(null, ausgabe, "Ergebnis",
JOptionPane.PLAIN_MESSAGE);
erzeugt das Fenster.
Hier hat die Methode 4 Argumente:
1.
null
Standard-Frame (keine Bindung an ein Fenster)
2
2.
ausgabe
b
Nachricht die angezeigt werden soll
Nachricht,
3.
"Ergebnis"
String in der Titelleiste
4.
JOptionPane.PLAIN_MESSAGE Bestimmt Anzeige des Message-Dialogtyps
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 135
Zusammenstellung der Message-Dialogtypen
Message-Dialogtyp
Icon
Bedeutung
JOptionPane.ERROR_MESSAGE
Fehlermeldung
JOptionPane INFORMATION MESSAGE
JOptionPane.INFORMATION_MESSAGE
informative Meldung;
der User kann sie nur
wegklicken
JOptionPane.WARNING_MESSAGE
Warnmeldung
JOptionPane.QUESTION_MESSAGE
Fragemeldung
JOptionPane.PLAIN_MESSAGE
Meldung ohne Icon
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 136
Variablen, Datentyp, Deklaration
•
Allgemein sind Variablen Platzhalter bzw. Speicherbereiche.
•
Variablen können eine bestimmte Menge von Werten annehmen. Diese
Menge bezeichnet man als Datentyp.
•
Eine Deklaration Datentyp variablenName ordnet der Variable mit dem
Namen variablenName einen bestimmten Datentyp zu.
•
Eine Variable wird deklariert, indem man zuerst ihren Typ angibt und
dahinter ihren Namen schreibt.
•
Variablen müssen stets deklariert sein
sein, bevor sie verwendet werden
werden.
•
Durch die Deklaration wird ein bestimmter Speicherplatz im RAM reserviert.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 137
Beispiel für eine Deklaration: int a;
Gibt es in einem Programm mehrere Variablen des selben Datentyps, so kann
man deren Namen bei der Deklaration durch Kommata getrennt hinter den
Datentyp setzen:
Beispiel: int a, b;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 138
Wertzuweisungen
In der Applikation StringAddition sind die Ausdrücke
ersteEingabe = JOptionPane.showInputDialog
("Geben Sie einen Text ein");
zweiteEingabe = JOptionPane.showInputDialog
("Geben Sie einen zweiten Text ein");
ausgabe = ersteEingabe + zweiteEingabe;
Wertzuweisungen
Wertzuweisungen.
Hier ist das = der Zuweisungsoperator.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 139
Die Variable ersteEingabe bekommt den String zugewiesen, der im
Eingabefenster eingegeben wurde.
Nach der Belegung der Variable durch den String, hat das Programm den
eingegebenen Wert im Hauptspeicher
Hauptspeicher.
Die Anweisung
ausgabe = ersteEingabe + zweiteEingabe;
weist der Variablen ausgabe die Aneinanderreihung der beiden Strings zu.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 140
Die Applikation Zahlen addieren
In der Applikation IntAddition sollen zwei ganze Zahlen über die Tastatur
eingelesen und die Summe berechnet und ausgegeben werden.
Ganze Zahlen sind in JAVA vom Datentyp int (integer).
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 141
// IntAddition.java
//Addiert zwei einzugebende ganze Zahlen
import javax.swing.JOptionPane;
class
l
IntAddition{
ddi i {
public static void main (String args[]){
//Variablendeklaration
String ersteEingabe,
//1. Eingabestring
zweiteEingabe; //2. Eingabestring
int zahl1,
zahl2,
summe;
//1. zu addierende Zahl
//2. zu addierende Zahl
//Summe von zahl1 und zahl2
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 142
//Einlesen der ersten Zahl als String:
ersteEingabe = JOptionPane.showInputDialog("Geben Sie
die erste ganze Zahl ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben Sie
die zweite ganze Zahl ein");
//Konvertierung
//
i
d
der Eingabe
i
b von String
i
nach
h i
int:
zahl1 = Integer.parseInt(ersteEingabe);
zahl2 = Integer.parseInt(zweiteEingabe);
//Addition der beiden Zahlen:
summe = zahl1 + zahl2;
//Ausgabe
JOptionPane.showMessageDialog(null,
"Die Summe ist " + summe,
"Ergebnis",JOptionPane.PLAIN_MESSAGE);
System.exit ( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 143
Die Applikation liefert folgende Ergebnisse
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 144
Datentypen und Typkonvertierung
Anmerkungen zu der Applikation IntAddition
•
Die Methode showMessageDialog() kann nur Strings einlesen und auch
nur Strings an das Programm weitergeben.
•
Jede Eingabe von der Tastatur ist daher ein String, d. h. auch wenn 5
eingetippt wird, ist 5 keine Zahl sondern ein String.
•
Sind 5 und 11 Zahlen, so ergibt 5 + 11 den Wert 16.
Sind 5 und 11 Strings,
Strings so ergibt "5
5 " + " 11 " den String "511"
511
•
Zahlen werden durch + arithmetisch addiert,
Strings werden aneinandergereiht.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 145
•
Da über die Tastatur die Eingabe als String erfolgt, müssen die Strings in
Integer Zahlen konvertiert (umgewandelt) werden.
•
Für die Typumwandlung von String in eine Integer-Zahl gibt es in JAVA die
Methode parseInt().
parseInt() Dies ist eine Methode der Klasse Integer aus
dem Paket java.lang. Beispiel:
zahl1 = Integer.parseInt(ersteEingabe);
•
Die Zeile
summe = zahl1 + zahl2;
besteht aus den zwei Operationen = und +. Der Operator + addiert die
Werte der beiden Zahlen, der Zuweisungsoperator = weist diesen Wert der
Variablen summe zu.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 146
•
Das Ergebnis wird ausgegeben:
"Die Summe ist " + summe
"Die Summe ist " ist ein String, summe eine Integer-Zahl.
String + Zahl ergibt String, d. h. der + Operator reiht die Strings aneinander.
summe wird automatisch in einen String konvertiert.
Man nennt dies automatische Typanpassung oder implizite Typkonvertierung
oder implizites Typcasting.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 147
Die Primitiven bzw. elementaren Datentypen
•
Variablennamen wie zahl1 und zahl2 beziehen sich auf bestimmte Stellen
im Arbeitsspeicher des Rechners.
•
Jede Variable hat einen Namen, einen Typ, eine Größe und einen Wert.
•
Bei der Deklaration einer Variablen werden bestimmte Speicherzellen
reserviert.
•
Der Name der Variable im Programmcode verweist während der Laufzeit
auf die Adresse dieser Speicherzellen
•
Die primitiven Datentypen bzw. elementaren Datentypen bekommen
standardmäßig die folgenden Speichergrößen zugewiesen:
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 148
S ch lüsselw ort
S p eicherplatz
W erteb ereich
Datentypen für ganzzahlige Werte (mit Vorzeichen)
byte
8 Bit
-128..127
short
16 Bit
-32768..32767
int
32 Bit
-2
231..2
231-1
1
long
64 Bit
-263..263-1
Datentypen für Gleitkommazahlen
float
32 Bit
double
64 Bit
- 3.40292347E+38 bis
+ 3.40292347E+38
- 1.7976313486231570E+308 bis
+ 1.7976313486231570E+308
Datentypen für Boolesche Werte
boolean
1 Bit
false, true
Datentypen für Unicode-Textzeichen
char
16 Bit
\u0000…\uFFFF
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 149
Der primitive Datentyp char
-
Eine Zeichenkonstante ist ein Zeichen, eingeschlossen in einfache
Anführungszeichen. Beispiel char c = 'a';
-
In JAVA ist eine Zeichenkonstante vom Typ char
-
Ein char ist nicht vorzeichenbehaftet
-
Der Datentyp char ist 2 Byte groß und nimmt ein Unicode-Zeichen auf.
-
Mit Zeichenkonstanten kann man rechnen wie mit ganzen Zahlen
-
Man kann sie in ganzzahligen Ausdrücken verwenden
-
Beispiel: Zeichen '1' hat im Unicode-Zeichensatz den Wert 49
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 150
// Zeichen.java
// Rechnen mit dem Datentyp char
class Zeichen{
public static void main (String args[]){
int b, f, g, h;
char c, d, e;
b = 5;
c = '1';
d = 'A';
e = 66;
f = b + c;
g = c + d;
h = b + d;
System.out.println ("b = "+ b +" \nc = "+ c + "\nd = "+ d);
System.out.println ("e = "+ e +"\nf = "+ f + "\ng = "+ g );
System.out.println ("h = "+ h );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 151
Zeichen.java liefert die Ausgabe
Bemerkung:
Das Zeichen '0' hat in Unicode den Wert 48, 'A' hat den Unicode
Wert 65.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 152
Typanpassungen (Casting) bei elementaren Datentypen
•
Müssen Datentypen angepasst werden, so bezeichnet man dies als
Typanpassung (Casting).
JAVA unterscheidet zwei Arten von Typanpassung:
•
Automatische Typanpassung
Daten eines kleineren Datentyps werden automatisch dem größeren
angepasst.
•
Explizite Typanpassung
größerer Typ
yp kann einem kleineren Typ
yp nur mit Verlust von
Ein g
Informationen zugewiesen werden.
Zwischen dem elementaren Datentyp boolean und den anderen elementaren
Datentypen findet keine Typanpassung statt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 153
Typumwandlungen in einen „breiteren“ Datentyp
Der Wert ist immer darstellbar. Es kann allerdings an Genauigkeit verloren
gehen, z. B. bei der Umwandlung von int nach float.
von Datentyp
y
in Datentyp
y
byte
short, int, long, float, double
short
int, long, float, double
char
int, long, float, double
int
g, float,
, double
long,
long
float, double
float
double
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 154
•
Werte der Datentypen byte und short werden bei Rechenoperationen
automatisch in den Datentyp int umgewandelt.
•
Ist ein Operand vom Datentyp long, dann werden alle Operanden auf
long gesetzt.
gesetzt
Beispiele für die automatische Typanpassung:
1. Beispiel int b = 7; double c = b; ergibt c = 7.0
2. Beispiel long a, b = 6; int c = 3;
a = b +c; wandelt automatisch alle Operanden in den Datentyp long um.
um
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 155
Explizite Typanpassung
Regel: Der gewünschte Typ für eine Typanpassung wird vor den
umzuwandelnden Datentyp geschrieben. Der Zieldatentyp ist dabei
geklammert d.
geklammert,
d h.
h (Typname) ausdruck
Beispiele: int n = (int) 5.316;
int m = (int) (4.315 + 1.66);
Bei der Konvertierung eines größeren Ganzzahltyps in einen kleineren
werden die oberen Bits abgeschnitten.
Beispiel: int i = 385; byte a= (byte) i; ergibt a = -127
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 156
Bei der Umwandlung von Gleitpunktzahlen in Ganzzahlen kann es zum
Verlust von Genauigkeit kommen.
Die Stellen hinter dem Komma (Punkt) werden abgeschnitten.
Bei zu großen Zahlen ist ein korrektes Ergebnis nicht möglich.
Beispiel double i = 345.886; int a = (int) i; ergibt a = 345;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 157
Die Umwandlung von short in char oder umgekehrt ist nur mit Hilfe der
expliziten Typumwandlung möglich (obwohl beide eine Größe von 16 Bit
haben).
Dies liegt am Vorzeichen von short.
short Der Datentyp char hat kein Vorzeichen
Vorzeichen.
Der Wert von positiven Zahlen bleibt bei der Konvertierung erhalten.
Beispiel: short i = 48; char a =
(char) i; ergibt a = '0'
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 158
Arithmetische Operationen:
Die Grundrechenoperationen in JAVA
Die Grundrechenoperationen bestehen aus einem Operator und zwei Operanden
(z. B. Operation 1 + 2 hat Operator + und Operanden 1 und 2).
Allgemein ist eine Operation gegeben durch einen Operator und mindestens einen
Operanden.
Operationen mit dem selben Operator aber unterschiedlichen Datentypen können
zu verschiedenen Ergebnissen führen
(Beispiel die Stringaddition "1" + "2" liefert anderes Ergebnis als die IntegerAddition 1 + 2).
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 159
// Arithmetik.java
// Führt verschiedene arithmetische Operationen durch
class Arithmetik {
public static void main (String args[]){
int a,b,c,d; //ganze Zahlen
double x,y,z;
//reelle Zahlen
String ausgabe;
a = 6 * (3 - 1); b = 6 * 3 + 5;
x = 16 / 5; y = 16 / 5.0; z = 16.0 / 5;
c = 16 / 5; d = 16 % 5;
ausgabe = "Das Ergebnis ist:\na = "+ a + "\nb = "+ b;
ausgabe = ausgabe + "\nx = "+ x + "\ny = "+ y + "\nz = "+ z;
ausgabe = ausgabe + "\nc = "+ c + "\nd = "+ d;
System.out.println (ausgabe);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 160
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 161
Der Additionsoperator A + B
Wendet man den zweistelligen Additionsoperator auf seine Operanden an, so
ist der Rückgabewert die Summe der Werte der beiden Operanden
Beispiel: int a = 6 + (3 + 4); ergibt a = 13
Der Subtraktionsoperator A – B
Wendet man den zweistelligen
g Subtraktionsoperator
p
auf die Operanden
p
A und
B an, so ist der Rückgabewert die Differenz der Werte der beiden Operanden.
Beispiel: int a = 16 - (3 - 4); ergibt a = 17
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 162
Der Multiplikationsoperator A * B
Der Operator multipliziert den Wert A mit dem Wert B. Es gelten die normalen
Rechenregeln, d. h. Klammer vor Punktrechnung vor Strichrechnung.
Beispiel: int a = 6 * (3 + 4); ergibt a = 42
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 163
Der Divisionsoperator A / B
Bei Nutzung des Divisionsoperators muss eine Fallunterscheidung
durchgeführt werden:
Erster Fall: A und B sind beide g
ganzzahlig
g ((z. B. vom Typ
yp int).
)
Man spricht bei A / B von einer ganzzahligen Division.
Das Ergebnis A / B ist wieder eine ganze Zahl. Der Nachkommateil des
Ergebnisses wird abgeschnitten.
Beispiel: int c = 16 / 5; ergibt c = 3
Dabei bestimmt sich der Quotient vom Betrag her nach der Vorschrift, dass der
Quotient die größtmögliche ganze Zahl ist, für die gilt:
|Quotient * Nenner| <= |Zähler|
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 164
Der Divisionsoperator A / B
Zweiter Fall:
A und/oder B sind Gleitpunktzahlen, d. h. vom Typ float oder double.
Das Ergebnis ist dann eine Gleitpunktzahl.
Beispiel: double d = 16.0 / 5; ergibt c = 3.2
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 165
•
Division durch 0
•
Sind beide Operanden ganze Zahlen (z. B. 3/0), so ergibt sich beim
Interpretieren die Meldung
•
Ist einer der Operanden eine Gleitpunktzahl, so ergibt sich als Ergebnis
Infinity mit Berücksichtigung des Vorzeichens
Beispiel double x = -4.0 / 0 ergibt x = -Infinity
double x =
4.0 / 0 ergibt x =
Infinity
Null durch Null ergibt NaN (Not a number)
Beispiel 0.0 / 0.0 = NaN
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 166
Der Restwertoperator A % B
Der Restwertoperator oder Modulo-Operator gibt den Rest der ganzzahligen
Division A / B an.
Das Ergebnis A % B ergibt sich aus A – (A / B) * B
B.
Das Ergebnis von A % B kann nur negativ sein, wenn der Zähler A negativ ist,
es kann nur positiv sein, wenn der Zähler A positiv ist.
Beispiele: (-9) % 2 =
-1
denn (-9) / 2 = -4
(-9)
(
9) % (
(-2)
) = -1 de
denn (
(-9)/
9)/ (
(-2)
) = 4
9 % (-2) = 1
denn 9 / (-2) = -4
9 % 2 = 1
denn 9 / 2 = 4
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 167
Rechenreihenfolge (Präzedenz) der arithmetischen Operatoren
Operator
Operation
Präzedenz
()
Klammern
werden zuerst ausgewertet
ausgewertet.
Sind Klammern von Klammern
umschlossen, werden sie von innen
nach außen ausgewertet.
*, /, %
Multiplikation,
Division,
Modulus
werden als zweites ausgewertet
+, -
Addition,
Subtraktion
werden zuletzt ausgewertet
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 168
Spezielle arithmetische Operatoren
Zuweisungsoperator
Beispiel
Bedeutung
+=
c += x
c=c + x
-=
c -= x
c=c - x
*=
c *= x
c = c * x
/=
c /= x
c = c / x
%=
c %= x
c = c % x
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 169
Inkrementoperator ++ und Dekrementoperator -Operator
Beispiel
Bedeutung
++
++c
erhöht c um 1, bevor der neue Wert von c in dem
Ausdruck verwendet wird, in dem sich c befindet
++
c++
verwendet den aktuellen Wert von c in dem
Ausdruck, in dem sich c befindet, und erhöht erst
dann c um 1
--
--c
erniedrigt c um 1, bevor der neue Wert von c in
dem Ausdruck verwendet wird, in dem sich c
befindet
--
c--
verwendet den aktuellen Wert von c in dem
Ausdruck, in dem sich c befindet, und erniedrigt
erst dann c um 1
Da die Operatoren ++ und – nur einen Operanden haben, heißen sie unär.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 170
Was liefert die folgende Applikation für eine Ausgabe?
class Inkrement{
public static void main (String args[]){
int c;
String ausgabe ;
c = 5;
ausgabe = c + ", ";
ausgabe
b +
+= c++
++ + "
", "
";
ausgabe += c + "\n";
c = 5;
ausgabe += c + ", ";
ausgabe += ++c + ", ";
ausgabe += c + "\n";
c = 5;
ausgabe += c + ", ";
ausgabe += --c + ", ";
ausgabe += c;
System.out.println(ausgabe);
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
}
Seite 171
Kontrollstrukturen
Eine Kontrollstruktur ist eine Abfolge von Anweisungen.
Jedes Programm kann mit Hilfe von drei Kontrollstrukturen geschrieben werden:
1. Sequenz (sequence structure)
2. Auswahl oder Selektion (selection structure)
3. Wiederholung oder Schleife (repetition structure)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 172
Die Sequenz - Blöcke
Die Sequenz ist eine einfache Abfolge von Anweisungen. Diese Anweisungen
werden in Form eines Blockes zusammengefasst.
{
Anweisung 1;
Anweisung n;
}
Anweisung 1
Die Darstellung der Sequenz
als Struktogramm:
Anweisung n
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 173
Die Auswahl- oder Selektionsstruktur
Die Selektion ermöglicht die Abarbeitung von Anweisungen in Abhängigkeit von
einer Bedingung.
In JAVA unterscheidet man zwischen der
•
einfachen Alternative mit if und else und der
•
mehrfachen Alternative mit else if oder switch.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 174
Die Selektion: Einfache Alternative – if und else
Als Struktogramm kann die Selektionsstruktur mit der einfachen Alternative wie
folgt dargestellt werden:
Bedingung
wahr
falsch
Anweisung a1
Anweisung b1
Anweisung an
Anweisung bm
Ist die Bedingung wahr,
wahr so wird der Block Anweisung a1 … Anweisung an
ausgeführt.
Ist die Bedingung falsch, so wird der Block Anweisung b1 … Anweisung bm
ausgeführt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 175
Die Syntax der Selektion mit einfacher Alternative lautet in JAVA
if (Bedingung) {
Anweisung a1;
…;
Anweisung an;
}else{
Anweisung b1;
…;
Anweisung bm;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 176
Bemerkung
•
Die Selektion wählt eine Anweisung bzw. eine Sequenz aus.
•
Besteht der Anweisungsblock nur aus einer einzigen Anweisung, so können
die geschweiften Klammern weggelassen werden
werden.
•
Die Bedingung nach if muss in runden Klammern stehen.
•
Die Bedingung nach if muss vom Typ boolean sein.
•
Der else-Zweig ist optional. Entfällt der else-Zweig, so spricht man von
einer bedingten Anweisung.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 177
Bedingungen in JAVA können durch Vergleichsoperatoren gebildet
werden
Operator
in JAVA
==
Beispiel
Bedeutung
x == y
x ist gleich y
!=
x != y
x ist ungleich y
>
x > y
x ist größer als y
<
x < y
x ist kleiner als y
>=
x >= y
x ist größer gleich y
<=
x <= y
x ist kleiner gleich y
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 178
Bemerkung zu den algebraischen Vergleichsoperatoren
•
Der Operator == darf nicht mit dem Zuweisungsoperator = verwechselt
werden.
•
Alle algebraischen Vergleichsoperatoren können nur zwei Ausdrücke von
primitiven Datentypen vergleichen.
•
Strings sind Objekte und werden mit der Methode equals() verglichen:
String1.equals(String2)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 179
Logische Verknüpfungen von Ausdrücken
Operator
in JAVA
&&
Bedeutung
||
logisches oder
!
logisches nicht
logisches und
Beispiel
JAVA
Bedeutung
if (a < b && b < c)
b liegt zwischen a und c
if (b < a || b > c)
b ist kleiner als a oder größer als c
if (!(b < 4))
b ist nicht kleiner als 4
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 180
Die Wahrheitstabelle der logischen Verknüpfungen
Operand 1
Operand 2
logisches und &&
false
false
false
false
true
false
true
false
false
true
true
true
Operand 1
Operand 2
logisches oder ||
false
false
false
false
true
true
true
false
true
true
true
true
Operand
logisches nicht !
false
true
true
false
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 181
Bemerkung zu den logischen Operatoren
In JAVA gibt es sowohl für das logische UND als auch für das logische ODER
zwei verschiedene Operatoren.
•
Logische UND: && bzw. &
Wird der Operator & zwischen zwei Operanden verwendet, so wird der
rechte Operand immer ausgewertet, egal ob der linke Operand true oder
false ist.
Wird der Operator && verwendet, so wird der rechte Ausdruck nur dann
ausgewertet, wenn der linke Ausdruck true ist.
Die Operatoren && und & haben identische Wahrheitstabellen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 182
•
Logische ODER-Operatoren: || bzw. |
Wird der Operator | zwischen zwei Operanden verwendet, so wird der
rechte Operand immer ausgewertet, egal ob der linke Operand true oder
false ist.
Wird der Operator || verwendet, so wird der rechte Ausdruck nur dann
ausgewertet, wenn der linke Ausdruck false ist.
Die Operatoren || und | haben identische Wahrheitstabellen.
•
Prioritäten
! vor && vor ||
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 183
// Vergleiche.java
//If Anweisungen und Vergleichsoperatoren
import javax.swing.JOptionPane;
class Vergleiche{
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
int zahl1, zahl2;
ersteEingabe = JOptionPane.showInputDialog("Geben Sie die
erste ganze Zahl ein");
zweiteEingabe = JOptionPane.showInputDialog("Geben Sie die
zweite ganze Zahl ein");
zahl1 = Integer.parseInt(ersteEingabe);
g
p
g
zahl2 = Integer.parseInt(zweiteEingabe);
//Initialisierung von ausgabe als leerer String:
ausgabe = "";
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 184
//Bestimmung des Ausgabestrings
if (zahl1 == zahl2){
ausgabe = ausgabe + zahl1 + " == " + zahl2;
}
if (zahl1 != zahl2){
ausgabe = ausgabe + "\n" + zahl1 + " != " + zahl2;
}
if (zahl1 < zahl2){
ausgabe = ausgabe + "\n" + zahl1 + " < " + zahl2;
}
if (zahl1 > zahl2){
ausgabe = ausgabe + "\n" + zahl1 + " > " + zahl2;
}
if (zahl1 <= zahl2){
ausgabe = ausgabe + "\n" + zahl1 + " <=
< " + zahl2;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 185
if (zahl1 >= zahl2){
ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2;
}
if (ersteEingabe.equals(zweiteEingabe)){
ausgabe = ausgabe + "\n" + ersteEingabe + " ist gleich "
+ zweiteEingabe;
}else{
ausgabe += "\n" + ersteEingabe + " ist nicht gleich "
+ zweiteEingabe;
}
JOptionPane.showMessageDialog(null, ausgabe);
System.exit ( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 186
Bemerkung
•
Jede lokale Variable, d. h. eine Variable innerhalb einer Methode muss vor
der Verwendung initialisiert werden. (Im Beispiel ausgabe = "";)
•
Werden lokale Variablen verwendet
verwendet, bevor sie initialisiert wurden,
wurden so erzeugt
der Compiler eine Fehlermeldung
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 187
Geschachtelte if- und else- Anweisungen
if- Anweisungen können auch geschachtelt werden.
Ein else-Zweig gehört dabei immer zu dem letzten if, für das noch kein elseZweig existiert.
Beispiel:
if (n < = 5)
if (a > b)
z = a;
else
z = b;
Soll eine andere Zugehörigkeit dargestellt werden, so müssen geschweifte
Klammern gesetzt werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 188
Die Selektion: Mehrfache Alternative – else if
else if Anweisungen bieten die Möglichkeit, eine Auswahl unter verschiedenen
Alternativen zu treffen. Die Syntax in JAVA lautet
if (Bedingung 1)
Anweisung 1; //Block
//Bl k oder
d
Ei
Einzelanweisung
l
i
else if (Bedingung 2)
Anweisung2;
else if (Bedingung n)
Anweisung n;
else
//der else-Zweig ist optional
Anweisung m;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 189
//Alternative Bestimmung des Ausgabestrings
if ((zahl1 <=
ausgabe =
ausgabe =
ausgabe =
zahl2) &&
ausgabe +
ausgabe +
ausgabe +
(zahl1 != zahl2)){
zahl1 + " < " + zahl2;
"\n" + zahl1 + " <= " + zahl2;
"\n" + zahl1 + " != " + zahl2;
}else if (zahl1 == zahl2){
ausgabe = ausgabe + "\n" + zahl1 + " == " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " <= " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2;
}else {
ausgabe = ausgabe + "\n" + zahl1 + " > " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " >= " + zahl2;
ausgabe = ausgabe + "\n" + zahl1 + " != " + zahl2;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 190
Ein weiteres Beispiel: Liegt bei einer einzugebenden Jahreszahl ein Schaltjahr vor?
Eine Jahr ist ein Schaltjahr, wenn die Jahreszahl durch 400 teilbar ist oder – falls
nein- wenn sie nicht durch 100 teilbar ist und gleichzeitig aber durch 4 teilbar ist.
import javax.swing.JOptionPane;
class Schaltjahr{
public static void main (String args[]){
String eingabe, ausgabe;
boolean schaltj;
int jzahl;
eingabe = JOptionPane.showInputDialog("Geben Sie ein
Jahr > 1583 ein");
//Konvertierung der Eingabe von String nach int:
jzahl = Integer.parseInt(eingabe);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 191
//Fallunterscheidung
if (jzahl % 400 == 0)
schaltj = true;
else if (jzahl % 100 == 0)
schaltj = false;
else if (jzahl
j
% 4 == 0)
schaltj = true;
else
schaltj = false;
if (schaltj)
ausgabe = eingabe + " ist ein Schaltjahr";
else
ausgabe = eingabe + " ist kein Schaltjahr";
JOptionPane.showMessageDialog(null,ausgabe);
System.exit ( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 192
Die Selektion: Mehrfache Alternative – switch
Die switch-Anweisung dient zur Selektion unter mehreren Alternativen (vgl.
else if-Anweisung).
Die Syntax in JAVA lautet
switch (Ausdruck){
case
konst1: Anweisungen 1;
break;
case
//ist optional
konst2: Anweisungen 2;
break; //ist optional
……
default : Anweisungen default;
//ist optional
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 193
Bemerkung zur switch-Anweisung
•
Der Ausdruck nach switch muss vom Datentyp byte, char, short oder
int sein.
•
Nach case darf jeweils nur eine Konstante stehen.
•
Nach case muss eine Konstante stehen, die bereits bei der Übersetzung
des Programms berechnet werden konnte.
•
Wenn es keine passende Konstante gibt, wird der Programmablauf bei der
default- Anweisung fortgesetzt, falls diese vorhanden ist.
•
Die break-Anweisung
b
k Anweisung ist von der Syntax her nicht erforderlich
erforderlich, sollte aber
stets gesetzt werden.
•
Ohne die break-Anweisung werden nach einer Übereinstimmung alle
weiteren Anweisungen ausgeführt
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 194
Beispiel für eine switch Anweisung
Sei monat eine Integer-Variable:
switch (monat){
case 4: tage = 30;
break;
case 6: tage = 30;
break;
case 9: tage = 30;
break;
case 11:tage = 30;
break;
case 2: tage = 28;
break;
default:tage = 31;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 195
oder (mit identischem Ergebnis)
switch (monat){
case 4:
case 6:
case 9:
case 11: tage = 30;
break;
case 2: tage = 28;
break;
default: tage = 31;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 196
Die Wiederholung oder Schleife
•
Schleifen dienen dazu, eine bestimmte Abfolge von Anweisungen
(Schleifenrumpf) wiederholt auszuführen. Die Anweisungen werden
ausgeführt, so lange eine bestimmte Bedingung (Schleifenbedingung) erfüllt
ist.
•
Eine Schleife wiederholt eine Anweisung bzw. eine Sequenz.
•
Dabei unterscheidet man Schleifen, bei denen die Schleifenbedingung am
Anfang geprüft wird, und Schleifen, bei denen diese Prüfung am Ende
erfolgt.
g
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 197
Schleifen mit Vorabprüfung (Abweisende Schleifen)
while-Schleife
•
In einer while-Schleife kann eine Anweisung oder ein Anweisungsblock in
Abhängigkeit
gg
von der Bewertung
g der Bedingung
g g wiederholt ausgeführt
g
werden. Da die Bedingung vor der Ausführung der Anweisungen bewertet
wird, spricht man auch von einer abweisenden Schleife.
•
Die Bedingung wird berechnet und die Anweisungen dann ausgeführt, wenn
der Ausdruck true ist.
•
Danach wird die Berechnung der Bedingung und die eventuelle Ausführung
der Anweisungen wiederholt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 198
Das Struktogramm für die while-Schleife
while Bedingung
Anweisung 1
Anweisung n
Die Syntax in JAVA für eine while-Schleife lautet:
while (Bedingung){
Anweisung 1;....;Anweisung n;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 199
Bemerkung
•
Besteht der Schleifenrumpf nur aus einer Anweisung, so können die
geschweiften Klammern {} weggelassen werden.
•
Um keine Endlos-Schleife zu erzeugen,
erzeugen muss die Schleifenbedingung durch
eine Anweisung manipuliert werden.
Beispiel
while (i < 10){
.....
i = i + 1;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 200
// Durchschnitt.java
/*Berechnet den Durchschnitt von x einzugebenden Zahlen.
Die Anzahl x wird eingelesen
*/
import javax.swing.JOptionPane;
class Durchschnitt{
public static void main (String args[]){
String eingabe, anzahl1, ausgabe;
int anzahl;
double durchschnitt;
int zahl = 0, zaehler = 1, gesamtsumme = 0;
//Einlesen der Anzahl der einzugebenden Zahlen als String:
anzahl1 = JOptionPane.showInputDialog("Geben Sie die Anzahl der
einzugebenden Zahlen ein");
anzahl = Integer.parseInt (anzahl1);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 201
while (zaehler <= anzahl){
eingabe = JOptionPane.showInputDialog("Geben Sie die "
+ zaehler +". Zahl ein");
//Konvertierung der Eingabe von String nach int:
zahl = Integer.parseInt(eingabe);
// Addition der Zahl zur Gesamtsumme
gesamtsumme = gesamtsumme + zahl;
// Zaehler um 1 erhöhen
++zaehler;
}
//Berechnung des Durchschnitts
durchschnitt = (double) gesamtsumme / anzahl;
//Ausgabe
g
JOptionPane.showMessageDialog(null,
"Durchschnitt:"+durchschnitt);
System.exit ( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 202
Abweisende Schleife mit for
Die Syntax in JAVA für eine for-Schleife lautet:
for ( Initialisierer ; Bedingung ; Aktualisierung){
Anweisung 1;....;Anweisung n;
}
B i i l
Beispiel:
for (int i = 1; i <= 10; i++)
System.out.println (i);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 203
Bemerkung zur for-Schleife
•
Die for-Schleife ist eine abweisende Schleife, da zuerst geprüft wird, ob die
Bedingung für ihre Ausführung zutrifft.
•
Die for-Schleife ist eine spezielle
p
Variante der while-Schleife. Sie wird
typischerweise zum Zählen benutzt.
•
Zu Beginn der Schleife wird einmalig die Initialisierung durchgeführt.
Hierdurch wird die lokale Variable, die in der Regel als Laufvariable
verwendet wird, definiert und initialisiert. Sie ist nach Beendigung der forSchleife ungültig
ungültig.
•
Die Schleifenbedingung wird vor dem Durchlaufen des Schleifenrumpfes,
d. h. vor jedem Schleifeneintritt, getestet. Ergibt der Ausdruck false, wird
die Schleife nicht durchlaufen und beendet.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 204
•
Die Aktualisierung, d. h. die Veränderung der Laufvariablen, wird am Ende
jedes Schleifendurchlaufs, aber noch vor dem nächsten Schleifeneintritt
ausgeführt.
•
Im ersten und letzten Teil einer for-Schleife können Kommata eingesetzt
werden. Damit lassen sich entweder mehrere Variablen deklarieren oder
mehrere Ausdrücke nebeneinander schreiben.
Beispiel:
for (int i = 1, j = 9; i <= j; i++, j--)
System.out.println
i l (i + "*" + j + " = " + i*j);
i*j)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 205
Zwei Beispiele zur for-Schleife
Beispiel 1
// Addierer.java
/*
Addiert alle ungeraden Zahlen zwischen 1 und 50
*/
class Addierer{
public static void main (String args[]){
int summe = 0;
for (int i = 1; i <= 50; i = i+2){
summe = summe + i;
}
System.out.println (summe);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 206
Beispiel 2
// GeschachtelteSchleife.java
/*
Beispiel für das Schachteln von 2 for-Schleifen
*/
class GeschachtelteSchleife {
public static void main (String
for (int i = 1; i <= 10;
for (int j = 2; j <= 5 ;
System.out.print (i*j
args[]){
i++){
j++)
+ "\t");
System.out.println ();
}
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 207
•
Die for-Schleife ist äquivalent mit
{
Initialisierer;
while (Bedingung){
Anweisung 1;…;Anweisung n;
Aktualisierung;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 208
Die in der Applikation Durchschnitt.java benutzte while-Schleife kann durch
folgende for-Schleife ersetzt werden:
for (int i = 1; i<= anzahl; i++){
eingabe = JOptionPane.showInputDialog("Geben Sie die "
+ i +". Zahl ein");
//Konvertierung der Eingabe von String nach int:
zahl = Integer.parseInt(eingabe);
// Addition der Zahl zur Gesamtsumme
gesamtsumme = gesamtsumme + zahl;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 209
Ein weiteres Beispiel für abweisende Schleifen
Die Applikation Ggt.java soll den größten gemeinsamen Teiler von zwei
positiven ganzen Zahlen berechnen. Die beiden Zahlen sollen eingegeben
werden. Falls eine der beiden Zahlen nicht positiv ist, soll eine Fehlermeldung
ausgegeben werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 210
// Ggt.java
/*Berechnet den groessten gemeinsamen Teiler von
zwei positiven integer Zahlen
*/
import javax.swing.JOptionPane;
class Ggt{
public static void main (String args[]){
String
ersteEingabe, zweiteEingabe, ausgabe;
int zahl1, zahl2, hilf;
ersteEingabe = JOptionPane.showInputDialog("Geben Sie die
erste positive ganze Zahl ein");
zweiteEingabe =JOptionPane.showInputDialog("Geben Sie die
zweite positive ganze Zahl ein");
zahl1 = Integer.parseInt (ersteEingabe);
zahl2 = Integer.parseInt (zweiteEingabe);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 211
//Sind beide Zahlen positiv?
if (zahl1 <=0 || zahl2 <= 0){
JOptionPane.showMessageDialog(null,"Die Zahlen muessen
positiv sein!","Fehler",JOptionPane.ERROR_MESSAGE);
System.exit (0);
}
while (zahl2 > 0){ //Vertausch zahl1 und zahl2
hilf = zahl1;
zahl1 = zahl2;
zahl2 = hilf;
zahl2 = zahl2 % zahl1;
}
//Ausgabe
JOptionPane.showMessageDialog(null, "ggt von „
+ersteEingabe+" und "+zweiteEingabe+" ist "+zahl1);
System.exit ( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 212
Die Ausgabe der Applikation Ggt.java sieht wie folgt aus:
oder falls eine Zahl nicht echt positiv ist:
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 213
Schleife Prüfung am Ende (Annehmende Schleife)
do while-Schleife
Die Syntax in JAVA lautet
do { Anweisung 1;…;Anweisung n;
} while ( Bedingung);
Struktogramm der do while Schleife:
Anweisung 1
Anweisung n
while Bedingung
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 214
Bemerkung zur do while Schleife
•
Die do while-Schleife ist eine annehmende Schleife, da die
Schleifenbedingung erst nach jedem Schleifendurchgang geprüft wird.
•
p schon einmal durchlaufen.
Bevor es zum ersten Test kommt,, ist der Rumpf
•
Achtung: Nach while (Bedingung); muss ein Semikolon gesetzt werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 215
//BinaerUmwandler.java
/*
Umwandlung einer ganzen Zahl in eine binäre Zahl
*/
import javax.swing.JOptionPane;
class BinaerUmwandler{
public static void main (String args[]){
String eingabe;
eingabe = JOptionPane.showInputDialog (null,
"Geben Sie eine ganze Zahl ein, die umgewandelt werden soll");
int zahl = Integer.parseInt(eingabe);
//Initialisierung
String binaer = "";
int rest;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 216
do {
rest = zahl % 2;
zahl = zahl / 2;
//Zusammensetzung des Strings zur Binaerdarstellung
binaer = rest + binaer;
} while (zahl > 0);
JOptionPane.showMessageDialog(null,"Die ganze Zahl "+ eingabe
+" hat die binaere Darstellung "+binaer);
System.exit( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 217
Die Endlosschleifen
Sind die Bedingungen von Schleifen immer wahr, so handelt es sich um
Endlosschleifen.
Beispiele
while-Schleife
while (true)
;
oder
while ( 0 == 0){
// immer wieder und immer wieder
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 218
Beispiel für eine Endlosschleife mit for
Alle drei Ausdrücke im Kopf der Schleife sind bei einer for Schleife optional.
Damit ist die einfachste Endlosschleife gegeben durch
f
for
( ; )
(;
;
Die Semikolons sowohl im Schleifenkopf als auch im Schleifenrumpf müssen
stets gesetzt werden.
Beispiel für eine Endlosschleife mit do while
do
;
while (true);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 219
Ausstieg aus Schleifen
• Die Schlüsselwörter break und continue ermöglichen es,
Anweisungsblöcke zu verlassen bzw. wieder einzusteigen.
• Wird innerhalb einer for-, while- oder do/while Schleife eine breakAnweisung gesetzt, so wird der Schleifendurchlauf beendet.
• break beendet immer die innerste Schleife
Beispiel
for (int i = 1; i < 1000;i++){
System.out.println(i);
y
p
if (i > 5)
break;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 220
Ausstieg aus beliebig tief geschachtelten Schleifen
•
Zum Ausstieg aus beliebig tief geschachtelten Schleifen wird ein so
genanntes Label benutzt, um anzuzeigen, wohin der Sprung gehen soll.
•
Ein Label besteht aus einem JAVA-Bezeichner, an den ein Doppelpunkt
gehängt wird.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 221
Bemerkung zum Einsatz eines Labels
•
Das Label gibt der Schleife einen Namen (im Beispiel TestSchleife)
•
Die break-Anweisung springt hinter die Schleife, die den Namen des Labels
trägt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 222
Beispiel für ein Schleifenausstieg mit Label
class BreakMitLabel{
public static void main (String args[]){
TestSchleife:
for (int i = 1; i < 10;i++){
f
for
(i t j = 1
(int
1; j < 10
10;j++){
j++){
System.out.println (i + j);
if ( j > 5)
break TestSchleife;
}
}
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 223
Noch ein Beispiel für ein Schleifenausstieg mit Label
class BreakMitLabel2{
public static void main (String args[]){
TestSchleife:
for (int i = 1; i < 3;i++){
N hEi L b l
NochEinLabel:
for (int j = 1; j < 10;j++){
System.out.println (i + j);
if ( j > 2)
break NochEinLabel;
}
}
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 224
Das Schlüsselwort continue
Im Gegensatz zu break beendet continue die Schleife nicht, sondern
überspringt die restlichen Anweisungen innerhalb der Schleife, um den nächsten
Durchgang zu starten.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 225
Beispiel für den Einsatz von continue
class BeispielMitContinue{
public static void main (String args[]){
int zahl = 12;
while (zahl > 0){
zahl--;
hl
if (zahl % 3 == 0)
continue;
System.out.println ("zahl = " + zahl);
}
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 226
Die Applikation BeispielMitContinue liefert die Ausgabe
Bemerkung: Die continue-Anweisungen können wie das break mit einem Label
ergänzt werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 227
Arrays
•
Ein Array ist eine grundlegende Datenstruktur.
•
Ein Array ist ein Objekt.
•
Unter einem Arrayy (Feld)
(
) versteht man eine Anordnung
g von Elementen
desselben Datentyps.
•
Die einzelnen Elemente heißen Komponenten und können über Indizes
angesprochen werden.
•
In JAVA beginnen die Indizes eines Arrays stets mit 0.
•
Der Zugriff
g auf die i-te Komponente
p
des Arrays
y mit dem Namen arrayName
y
erfolgt durch arrayName[i-1].
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 228
Arrays werden in drei Schritten erstellt
a. Deklaration der Arrayvariablen
b. Zuweisung von Speicher für die Komponenten des Arrays
c.
Initialisierung der Komponenten
zu a.
Durch die Deklaration einer Arrayvariablen wird eine Variable definiert, die auf
ein Array-Objekt zeigen kann. Die Variable ist also eine Speicheradresse, die
zunächst den Wert null (d.
(d h
h. keinen Wert) hat.
hat Da es sich um einen Zeiger
handelt, bezeichnet man Arrayvariablen als Referenzvariablen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 229
zu a.
Die allgemeine Form der Definition einer Referenzvariablen auf ein
eindimensionales Array ist:
Typname[] arrayName;
oder
Typname arrayName [];
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 230
zu b:
Mit dem new-Operator kann das konkrete Array erzeugt werden.
Beispiel:
arrayName
y
= new byte
y
[
[4]
] legt
g ein Array-Objekt
y
j
mit 4 Komponenten
p
an.
Diese Komponenten werden mit dem Wert binär 0 belegt (d. h. z. B. bei Zahlen
wie int mit Wert 0, boolean mit false, char mit null und Objekte mit
null).
Es wird jetzt 4 mal so viel Speicher reserviert, wie der Datentyp des Arrays für
die Speicherung von einem Element benötigt.
zu c:
Durch Zuweisung von Werten an die Komponenten können die Default-Werte
mit sinnvollen Werten überschrieben werden, z. B. arrayName[0] = 3;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 231
zu a,b,c: Implizites Erzeugen über eine Initialisierungsliste
Eine andere Möglichkeit, ein Array anzulegen, ist, das Array implizit über eine
Initialisierungsliste zu erzeugen und gleichzeitig zu initialisieren.
p
byte[]
y [] arrayName
y
= {
{1,2,3,4}
, , , }
Beispiel:
Das Erzeugen des Array-Objektes wird hier vom Compiler im Verborgenen
durchgeführt. Die Definition der Referenzvariablen arrayName, das Anlegen
des Arrays, sowie die Initialisierung der Array-Elemente erfolgt in einem Schritt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 232
Bemerkung zu Arrays
•
Arrays kann man von einem beliebigen Datentyp oder einer beliebigen
Klasse erstellen. Dies können primitive Datentypen, Objekte oder andere
Arrays sein. Im letzteren Fall spricht man dann von mehrdimensionalen
Arrays.
y
•
Die Größe eines Arrays wird zum Zeitpunkt der Erstellung des Arrays
festgelegt, danach kann sie nicht mehr verändert werden.
•
Mit Hilfe der Eigenschaft length kann man die Anzahl der Komponenten
des Arrays erhalten. (siehe temperatur.length im Programm-Beispiel)
•
JAVA erlaubt
l bt einen
i
Z
Zugriff
iff ausschließlich
hli ßli h auff solche
l h El
Elemente
t eines
i
A
Arrays,
die auch tatsächlich vorhanden sind. Bei jedem Zugriff auf ein Array wird
der angegebene Index mit den in der Array-Deklaration angegebenen
Grenzen verglichen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 233
Beispiele für das Erzeugen von Arrays
/* a
/* b
/* c
*/
*/
*/
int feld[];
feld = new int [8];
for (int i = 0; i < feld.length; i++)
feld[i] = i
i*i;
i;
oder
/* a
*/
/* b,c */
int feld[];
feld = new int[] {0,1,4,9,16,25,36,49};
oder
/* a,b,c
*/
int feld[] = {0,1,4,9,16,25,36,49};
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 234
// TemperaturJan.java
//Initialisierung und Ausgabe eines Arrays
class TemperaturJan{
public static void main (String args[]){
final int ANZAHL_TAGE = 31;
String ausgabe;
double temperatur[] = new double [ANZAHL_TAGE];
//Initialisierung mit Durchschnittswerten;
for (int i = 0; i < temperatur.length;i++)
temperatur [i] = 5.3;
//Ausgabe der Arraywerte
ausgabe = "Tag\tTemperatur\n";
for (int i = 0; i < temperatur.length;i++)
ausgabe += i+ "\t" + temperatur [i] + "\n";
System.out.println (ausgabe);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 235
Konstanten in JAVA
•
Das Schlüsselwort final (siehe Beispiel TemperaturJan) indiziert, dass
die deklarierte Variable (ANZAHL_TAGE) eine Konstante ist. Sie wird bei ihrer
Deklaration initialisiert und kann danach nicht wieder verändert werden.
•
Manchmal werden Konstanten auch als „read-only“ Variablen bezeichnet.
•
Der Versuch, eine final-Variable zu verändern, resultiert in einer
Fehlermeldung des Compilers.
•
Konstanten werden durchgängig in Großbuchstaben geschrieben.
Unterstriche sind hier erlaubt.
erlaubt
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 236
Methoden
Eine Methode ist ein Block von Anweisungen, der gewisse Eingabeparameter
als Input benötigt und nach Ausführungen der Anweisungen einen Wert zurück
gibt. Dabei kann die Menge der Eingabeparameter oder die Rückgabe auch leer
sein.
sein
Eine Methode besteht aus vier Teilen (ein Konstruktor nur aus drei, s. später):
Dem Rückgabetyp, dem Methodennamen, der Eingabe- bzw. Parameterliste
und dem Methodenrumpf.
Der Rückgabetyp gibt den Datentyp des zurückgegebenen Wertes an.
Der Methodenname legt den Namen der Methoden fest.
Der Methodenrumpf besteht aus einzelnen Anweisungen, die von geschweiften
Klammern { } umschlossen werden, d. h. einen Block bilden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 237
Damit hat eine Methode folgende Gestalt
Rückgabetyp methodenName (Parameterliste){
Anweisung 1;
……. ;
Anweisung m;
Methodenrumpf
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 238
Die Eigenschaften der Parameterliste
•
Sie besteht aus endlich vielen Parametern, die von runden Klammern
umschlossen werden.
•
Die Parameterliste kann auch leer sein. Man muss dennoch die runden
Klammern hinter dem Methodennamen setzen, d. h. methodenName()
•
Parameter können beliebige Daten sein (z. B. Zahlenwert, Strings, Objekte).
Parameter werden wie Variablen definiert, d. h. erst der Datentyp, dann der
Name.
Jeder Parameter muss einzeln definiert werden,, die Parameter werden
durch Kommata getrennt.
•
Wichtig: Die Reihenfolge der Parameter in der Methodendeklaration ist
bindend festgelegt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 239
Methodendeklaration – der Rückgabetyp
Man unterscheidet zwei Arten von Methoden: Methoden ohne Rückgabewert
und Methoden mit Rückgabewert.
Wie Variablen müssen Methoden auch deklariert werden:
Die Syntax einer Methode mit Rückgabe
Datentyp des Rückgabewertes methodenName (Datentyp p1,…,Datentyp pn){
…….;
return Rückgabewert;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 240
Methode ohne Rückgabe
void methodenName (Datentyp p1,…,Datentyp pn){
…….;
}
•
Das reservierte Wort void gibt an, dass die Methode keinen
Rückgabewert liefert
liefert.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 241
Bekannte Beispiele für Methoden
•
Methode showMessageDialog() der Klasse JOptionPane liefert void
•
Methode showInputDialog() der Klasse JOptionPane liefert String
•
Methode parseInt() der Klasse Integer liefert int
•
Methode main()liefert void
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 242
Anmerkungen zu Methoden
•
Methoden müssen stets vollständig in der Klasse angegeben werden, der sie
angehören.
•
Es gibt keine Methoden außerhalb von Klassen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 243
Der Aufruf einer Methode
Der Aufruf erfolgt durch die Angabe des Namens der Methode mit Angaben der
Eingabeparameter.
Beispiele:
Integer.parseInt (ersteEingabe);
JOptionPane.showMessageDialog(null,"Die Zahlen muessen
positiv sein!","Fehler",JOptionPane.ERROR
p
,
, p
_MESSAGE);
);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 244
Statische Methoden
Es werden zwei Arten von Methoden unterschieden. Dies sind die
Instanzmethoden (objektgebundene Methoden) und die Klassenmethoden. Hier
beschäftigen wir uns zunächst mit den Klassenmethoden.
Klassenmethoden oder statische Methoden sind eine spezielle Art von
Methoden, die kein Objekt benötigen (die Bedeutung von Objekte werden wir
später behandeln).
Eine statische Methode wird unter Angabe des Namens derjenigen Klasse, in
der sie deklariert ist, aufgerufen, d. h.
Klassenname.Methodenname (…);
Der Klassenname kann auch weggelassen werden, wenn die Methode in
derselben Klasse deklariert ist.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 245
Deklaration von statischen Methoden
Deklariert wird eine statische Methode, indem man vor dem Rückgabetyp das
reservierte Wort static schreibt.
Statische Methode mit und ohne Rückgabe
static Datentyp des Rückgabewertes methodenName (Datentyp p1,…,Datentyp pn){
…….;
return Rückgabewert;
}
static void methodenName (Datentyp p1,…,Datentyp pn){
…….;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 246
Beispiele für den Einsatz von statischen Methoden
class MaximumBestimmung {
static int maximum (int x, int y){
if (x > y)
return x;
else
return y;
}
public static void main (String args[]) {
int a = 3, b = 10;
int m;
m = maximum(a,b);
i
( b)
System.out.println("Maximum ist "+m);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 247
Ein weiteres Beispiel für die Verwendung von Klassenmethoden
// Rechteck.java
/*Liest die Seitenlaengen eines Rechtecks ein und ermittelt
Flaecheninhalt und Laenge der Diagonale
*/
import javax.swing.JOptionPane;
class Rechteck {
static double liesSeite() {
String eingabe;
double zahl;
eingabe =JOptionPane.showInputDialog("Geben Sie eine
Seitenlaenge des Rechtecks ein:");
zahl = Double.parseDouble (eingabe);
return zahl;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 248
static double inhalt (double x, double y){
double i;
i = x*y;
return i;
}
static double diagonale (double x, double y){
double d;
d = Math.sqrt(x*x + y*y);
return d;
}
public static void main (String args[]) {
double a, b, c , d;
a = liesSeite();
b = liesSeite();
c = diagonale(a,b);
di
l ( b)
d= inhalt(a,b);
String ausgabe = "Flaecheninhalt: " + d +"\nDiagonale: "+c;
JOptionPane.showMessageDialog(null,ausgabe);
System.exit (0);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 249
Bemerkung: Die Deklaration static
Nicht nur Methoden können static sein.
Sollen Attribute oder Methoden für alle Objekte der Klasse zugänglich sein, so
werden sie als static deklariert. Man spricht
p
dann von Klassenvariablen
bzw. Klassenmethoden.
Meist werden Methoden als static deklariert, um sie anderen Klassen zur
Verfügung zu stellen, ohne Objekte der betreffenden Klassen zu erzeugen, z.
B. Methode sqrt() aus der Klasse Math.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 250
Methoden der Klasse Math
•
Für die arithmetischen und trigonometrischen Standardfunktionen hat JAVA
eine spezielle Klasse, die Klasse Math.
• Math
M th gehört zum Paket java.lang,
j
l
dem einzigen Paket
Paket, das
automatische in jedes Programm importiert wird.
• Math-Methoden können damit jederzeit genutzt werden.
•
Alle Math-Methoden sind static.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 251
Einige Methoden der Klasse Math
• abs: Liefert den Betrag einer Zahl
double abs (double a)
float abs (float a)
int abs (int a)
long abs (long a)
• acos, asin, atan: Liefern den arc cosinus, arc sinus, arc tan eines
Winkels
double acos (double a)
double asin (double a)
double atan (double a)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 252
• cos, sin, tan: Trigonometrische Funktionen, in Bogenmaß
double cos (double a)
double sin(double a)
double tan(double a)
• exp: Liefert die Eulersche Zahl e hoch einen double Wert
double exp (double a)
• log: Liefert den natürlichen Logarithmus (d. h. zur Basis e) von einem
double-Wert
double log (double a)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 253
• max, min: Liefert Maximum bzw. Minimum zweier Zahlen
double max (double a, double b)
float max(float a, float b)
int max(int a, int b)
long max (long a, long b)
double min (double a, double b)
float min(float a, float b)
int min(int a, int b)
long min (long a, long b)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 254
• pow: Liefert den Wert des ersten Arguments potenziert mit dem zweiten
Argument
double pow (double a, double b)
• random: Liefert einen positiven Zufalls- double-Wert größer gleich 0.0 und
kleiner 1.0
double random()
• round: Runden auf ganze Zahlen
long round (double a)
int round (float a)
• sqrt: Liefert die Wurzel
double sqrt (double a)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 255
Runden von Zahlen
•
Die Methode round() der Klasse Math rundet Zahlen.
• round() rundet auf die nächste Ganzzahl vom Typ long (kaufmännisches
Runden).
Runden)
Beispiel: double a = 97.56; // ergibt Math.round(a) = 98;
•
Mit Hilfe von round() können auch auf Nachkomma-Stellen gerundet werden.
•
Beispiel: Runden auf 2 Nachkommastellen
Math round(a*100)/100 liefert für a = 1.3456
Math.round(a*100)/100.
1 3456 den Wert 1.35
1 35
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 256
Überladen von Methoden
Eine Methode ist gekennzeichnet durch Rückgabewert, Name und Parameterliste.
Eine überladene Methode ist eine Methode mit gleichem Namen wie eine andere
Methode, aber mit einer anderen Parameterliste. Es gibt zwei Arten:
•
Eine Methode kann die gleiche Anzahl von Parametern wie eine andere
besitzen und unterschiedliche, aber für den Compiler unterscheidbare, Typen
annehmen
•
Die
e Anzahl
a de
der Parameter
a a ete kann
a unterschiedlich
u te sc ed c sein.
se
Beispiel die Methode min() aus der Klasse Math.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 257
Grundlagen der Objektorientierung
Ziel der objektorientierten Programmierung (OOP) ist die mehrfache Verwendung
von Programmcode.
Die Grundidee der OOP ist der Ansatz
Ansatz, dass Programme die Welt oder Teile der
Welt abbilden.
Die Welt besteht aus Objekten. Das sind
•
Gegenstände (Autos, Flugzeuge, Schiffe…)
•
Lebewesen (Menschen, Tiere, Pflanzen…)
•
abstrakte Konstrukte (Staaten, Konzerne, Konten…)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 258
Für diese Objekte gilt
•
Sie können in Kategorien bzw. Klassen -d. h. in sinnvolle Einheitenzusammengefasst werden.
Beispiel: Tiere, Pflanzen, Wirbeltiere, Säugetiere, Fische gehören alle zur
Klasse der Lebewesen.
•
Jedes Objekt hat individuelle Eigenschaften (ein Objekt „Person“ hat einen
Namen, ein Objekt „Auto“ eine Marke…)
•
Objekte erfahren Prozesse oder führen sie selber aus (ein Mensch wird
geboren, der Kontostand von Person A verringert sich…)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 259
Die Theorie der Objektorientierung fasst dies zu einem Konzept zusammen.
In der Objektorientierung werden die folgenden Bezeichnungen verwendet:

Klassen
Eigenschaften 
Attribute
Kategorien
Prozesse

Methoden
Klasse
attribute
methoden()
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 260
Klassen und Objekte
•
Eine Klasse ist ein Schema, eine Schablone, eine Kategorie, in die
bestimmte individuelle Objekte eingeordnet werden können.
•
j
zu einer Klasse,, g
gelten alle Eigenschaften
g
der Klasse.
Gehört ein Objekt
•
Ein Objekt ist immer eine konkrete Ausprägung einer Klasse, man sagt:
•
•
Ein Objekt ist eine Instanz seiner Klasse.
Die Klasse ist der zentrale Begriff aus Sicht der objektorientierten
Programmierung.
•
Ein Objekt ist eindeutig bestimmt durch seine Attribute (Daten,
Eigenschaften) und durch seine Methoden (Funktionen, Verhalten).
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 261
•
Wie man von einem Konstruktionsplan für ein Auto mehrere Fahrzeuge von
diesem Typ bauen kann, so kann man auch von einer Klasse mehrere
Objekte „bauen“.
•
So wie die Autos in unterschiedlichen Farben, Motoren und Ausstattungen
gebaut werden, so können auch von Klassen die Objekte mit verschiedenen
Eigenschaften erstellt werden.
•
Aus der Weltanschauung könnte dann der Hersteller dem Paket, die
Werksabteilung der Klasse, die Materialien den Attributen, die Maschinen
den Methoden und der Konstruktionsplan dem Konstruktor in JAVA
entsprechen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 262
•
Eine einfache Anwendung für eine Klasse ist das Zusammenfassen
zusammengehöriger Variablen.
String ist eine Klasse, die aus einem Array aus char-Variablen besteht.
Nach der Erzeugung des Strings, d. h. nach dem Anlegen der Instanz bzw.
des Objektes
Objektes, besteht der String aus zusammengehörigen Buchstaben
Buchstaben, die
zu einem Wort zusammengefasst sind.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 263
Kapselung
Ein wesentliches Konzept der Objektorientierung ist, dass die Attribute von den
Methoden vor der Außenwelt gekapselt sind. Sie können (im allgemeinen) nur
durch die Methoden verändert werden.
Die Methoden eines Objektes sind die Schnittstellen des Objektes zur
Außenwelt.
Es bedeutet, dass der Anwender nur über diese Schnittstellen auf die Attribute
und Methoden einer Klasse zugreifen kann.
Attribute
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 264
Generalisierung und Vererbung
•
Einzelne Klassen können zu weiteren Klassen zusammengefasst werden. Z.
B. können die Klasse der Autos, die Klasse der Flugzeuge und die Klasse
der Schiffe zur Klasse der Fortbewegungsmittel zusammengefasst werden
werden.
Man sagt, dass die einzelnen Klassen generalisiert bzw. verallgemeinert
werden.
•
Die allgemeine Klasse heißt Superklasse, Oberklasse oder Mutterklasse.
•
Die speziellen Klassen heißen Subklassen, Unterklassen oder Kindklassen.
•
Eine Superklasse hat eine besondere Beziehung zu ihrer Subklasse (oder
ihren Subklassen), eine „Ist-ein“-Beziehung (‚is-a‘ relation)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 265
•
Alle Attribute und Methoden der Superklasse sind gleichzeitig Attribute und
Methoden jeder ihrer Subklassen.
•
Man sagt, dass ein Objekt einer Subklasse die Attribute und Methoden der
Superklasse erbt
erbt. Die Attribut und Methoden sind dann für die Subklasse
sichtbar.
•
Dieses Prinzip nennt man Vererbung.
•
Für Subklassen spezifische Attribute und Methoden können nicht geerbt
werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 266
UML
•
UML (Unified Modelling Language) ist eine Sprache zur visuellen
Modellierung von Strukturen und Prozessen von Software.
•
Sie ist Standard der modernen Software-Entwicklung
Software Entwicklung
•
Eines der Diagramme der UML ist das Klassendiagramm
•
Jede Klasse wird als ein Rechteck dargestellt, mit dem Namen der Klasse
im oberen Teil, allen Daten (Attributen) im mittleren Teil und den Methoden
im unteren Teil.
•
Oft wird in der UML einer der beiden unteren Teile weggelassen, wenn sie
für die jeweilige Betrachtung nicht interessant sind.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 267
Einige Darstellungsformen aus UML
Klasse
Objekt
Klasse
:Klasse
attribute
attribute
methoden()
th d ()
methoden()
th d ()
Vererbung
SubKlasse
SuperKlasse
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 268
Ein erstes Beispiel für eine Klasse
Gegeben sei ein Punkt im Koordinatensystem mit einer x- und einer yKoordinate.
Damit hat ein jeder Punkt die Eigenschaften (Attribute)
double y; double x
Jeder Punkt hat auch Methoden, dies sind Methoden, die die Koordinaten x und
y setzen und Methoden, die die Koordinaten eines Punktes auslesen.
Natürlich sind auch noch andere Methoden möglich.
Damit hat die Klasse Punkt die Form
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 269
Die Syntax für eine Klasse lautet
class Klassenname{
Deklaration der Attribute;
Deklaration der Methoden;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 270
class Punkt {
double x;
double y;
double getX(){
return x;
}
//Attribut
//Attribut
//get-Methode
double getY(){
return y;
}
//get-Methode
void setX(double i){
x = i;
}
//set-Methode
void setY(double j){
y = j;
}
//set-Methode
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 271
Erzeugen eines Objektes, d. h. einer Instanz einer Klasse
Als nächstes wird ein Objekt von der Klasse Punkt erzeugt.
Dies erfolgt innerhalb der Klasse PunktApp in der main-Methode.
class PunktApp{
public static void main (String args[]) {
Punkt p;
//Deklaration der Variable
p = new Punkt(); //Erzeugung des Objektes
p.setX(3.7);
p.setY(4.0);
System out println("Koordinaten
System.out.println(
Koordinaten des
Punktes sind:
("+p.getX() +","+ p.getY()+")");
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 272
Der new-Operator
•
Die Erzeugung eines Objektes geschieht mit dem new-Operator und der
Zuordnung der Variablen:
KlassenName variable = new KlassenName();
(*)
•
Der new-Operator erzeugt bzw. instanziiert ein Objekt.
•
Nach dem new-Operator erscheint eine spezielle Methode, der so genannte
Konstruktor. Er trägt den Namen der Klasse des erzeugten Objekts und
initialisiert die Attribute.
Dem Konstruktor können Parameter übergeben werden –oder wie hierkann die Parameterliste leer sein. In diesem Fall spricht man von einem
Standardkonstruktor.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 273
•
Die Zeile (*) kann auch in zwei Zeilen geschrieben werden:
Deklaration der variable durch Klassenname variable;
hierdurch wird Speicherplatz reserviert.
Erzeugung
g g des Objektes
j
mit dem new-Operator,
p
, d. h.
variable = new KlassenName();
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 274
Zugriff auf die Methoden und Attribute des Objektes
•
Wurde ein Objekt p erzeugt, so kann durch p.Attribut auf die Attribute
zugegriffen bzw. durch p.methode() die Methoden des Objektes verwendet
werden Im Beispiel PunktApp
werden.
P ktA wurde z.
z B.
B durch p.setX(3.7);
tX(3 7) die
Methode setX() des Objektes p aufgerufen.
•
Bemerkung: Im Allgemeinen ist es nicht erlaubt, direkt auf Attribute
zuzugreifen. Auch der Zugriff auf Methoden kann beschränkt sein. Dies wird
näher im Kapitel: „Öffentlichkeit
Öffentlichkeit und Privatsphäre“
Privatsphäre behandelt.
behandelt
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 275
Lokale Variablen und Attribute
•
Ein Aufrufparameter einer Methode hat einen Geltungsbereich nur für die
eine Methode, die mit ihm aufgerufen wird.
•
Er ist eine lokale Variable. Lokale Variablen gelten („leben“) immer nur in der
Methode, in der sie deklariert sind.
•
Attribute sind keine lokalen Variablen. Sie sind Variablen, die in der
gesamten Klasse bekannt sind. Sie gelten damit auch in jeder Methode, die
in der Klasse deklariert ist.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 276
Ein weiteres Beispiel:
Es sollen zwei Konten erstellt werden, von denen jeweils ein Betrag zugebucht
und abgebucht werden kann.
class Konto{
//Attribute
int kontoNr;
double saldo;
//Methoden
void einzahlen (double betrag){
saldo += betrag;
}
void abheben (double betrag){
saldo -= betrag;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 277
Die Erzeugung der Objekte findet in der main()-Methode der Klasse KontoApp
statt.
class KontoApp{
public static void main (String args[]) {
Konto k1, k2;
k1 = new Konto();
k2 = new Konto();
K t ()
k1.kontoNr = 1;
k2.kontoNr = 2;
k1.saldo = 1000;
k2.saldo = 500;
k1.einzahlen(300);
k2.abheben(40);
System.out.println("Saldo von Konto "
+k1 kontoNr
+k1.kontoNr
+": "+k1.saldo
+"\nSaldo von Konto "
+k2.kontoNr +": "+k2.saldo);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 278
Bemerkung zu der Klasse Konto
•
In der Applikation KontoApp wurden zwei Instanzen der Klasse Konto
erstellt.
•
pp, d. h. außerhalb der Klasse Konto,, kann direkt auf die
Von KontoApp,
Attribute der Objekte zugegriffen werden und diese verändert werden z. B.
durch k1.saldo = 1000;
•
Dies ist sehr gefährlich, denn somit können unkontrolliert Werte von
Attributen von außen manipuliert werden, ohne dass das Objekt, d. h. der
Besitzer der Attribute,, hierauf Einfluss hat.
•
Um dies zu verhindern, sollten Attribute stets geschützt werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 279
Öffentlichkeit und Privatsphäre
•
Oft ist es sinnvoll Attribute und Methoden einer Klasse nur teilweise oder
gar nicht der Öffentlichkeit zur Verfügung zu stellen.
•
Man spricht
p
von Kapselung,
p
g, wenn die Attribute vor der Außenwelt
verborgen sind und nur über die eigenen Methoden verändert werden
können.
•
Die Kapselung ist eines der wichtigsten Konzepte der Objektorientierung.
•
Somit kann kein anderes Programm oder Objekt auf verborgene Attribute
zugreifen und dort unbeabsichtigt Effekte bewirken
bewirken.
•
Dadurch wird auch verhindert, dass das Objekt unbeabsichtigt in anderen
Programmen etwas zerstört.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 280
Sichtbarkeit
In einer Klasse kann bei einer Definition jeder einzelnen Komponente separat
spezifiziert werden, in welcher Weise der Zugriff auf diese Komponente
möglich ist. Unterschieden werden kann zwischen private, protected,
public und keine Angabe.
Spezifizierer in selber
Klasse
in Unterklasse in selbem
Paket
private
sichtbar
keine Angabe
sichtbar
protected
sichtbar
sichtbar
sichtbar
public
sichtbar
sichtbar
sichtbar
überall
sichtbar
sichtbar
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 281
In JAVA sind Zugriffsmodifikatoren erlaubt für Klassen, Schnittstellen,
Methoden, Konstruktoren und Attribute.
Die nächste Tabelle zeigt die möglichen Zugriffsmodifikatoren für
verschiedene Elemente:
Element
private
nichts
angegeben
protected
public
Attribut
X
X
X
X
Methode
X
X
X
X
Konstruktor
X
X
X
X
Klasse
X
X
Schnittstelle
X
X
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 282
Wenn wir in der Klasse Konto.java das Attribut kontoNr und saldo
mit private schützen, so kann die Applikation KontoApp nicht mehr
hierauf zugreifen.
class Konto{
//Attribute
private int kontoNr;
private double saldo;
//Methoden
void einzahlen (double betrag){
saldo += betrag;
}
void abheben (double betrag){
g
saldo -= betrag;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 283
Es müssen Methoden definiert werden, die den Zugriff auf die Attribute ermöglichen:
class Konto{
private int kontoNr;
private double saldo;
public int getKontoNr () {
return kontoNr;
;
}
public double getSaldo () {
return saldo;
}
void setKontoNr ( int nummer) {
kontoNr = nummer;
}
void setSaldo ( double kontoStand) {
saldo = kontoStand;
}
//weitere Methoden einzahlen() und abheben()
}
Seite 284
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
public class KontoApp{
public static void main (String args[]) {
Konto k1, k2;
k1 = new Konto();
k2 = new Konto();
k1 setKontoNr(1);
k1.setKontoNr(1);
k2.setKontoNr(2);
k1.setSaldo(1000);
k2.setSaldo(500);
k1.einzahlen(300);
k2.abheben(40);
System.out.println("Saldo von Konto "+k1.getKontoNr() +":"
+k1.getSaldo()
+"\nSaldo von Konto "
+k2.getKontoNr() +": "
+k2.getSaldo());
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 285
Die Applikation erzeugt
kontoNr und saldo von k1 und k2 können also kontrolliert durch die
Methoden der Klasse Konto verändert werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 286
Das Beispiel Konto wird nun etwas erweitert
Es soll eine Applikation programmiert werden, die 5 Konten mit einem
Startguthaben von 100 Euro einrichtet und Überweisungen von einem Konto zu
einem anderen Konto durchführt.
durchführt
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 287
public class Konto{
//Attribute
private int kontoNr;
private double saldo;
//Konstruktor
public Konto(int kontoNr){
this.kontoNr = kontoNr;
saldo = 100; //Startguthaben
}
//Methoden
public int getKontoNr(){
return kontoNr;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 288
public double getSaldo(){
return saldo;
}
public void einzahlen (double betrag){
saldo +=
+ betrag;
}
public void abheben (double betrag){
saldo -= betrag;
}
public void ueberweisen(Konto nachKonto, double betrag){
saldo -= betrag;
nachKonto.einzahlen(betrag);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 289
//Applikation, die Konten erzeugt und Überweisungen ermöglicht
import javax.swing.JOptionPane;
class KontoApp{
public static void main (String args[]) {
final int ANZAHL_KONTEN = 5;
//erzeugt Array von Konten mit Kontonummer 0,1,2,3,4
Konto kontoArray[] = new Konto[ANZAHL_KONTEN];
for (int i = 0; i< kontoArray.length;i++){
kontoArray[i] = new Konto(i);
}
Konto vonKonto, nachKonto;
double betrag;
String eingabe, ausgabe;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 290
eingabe =JOptionPane.showInputDialog("Überweisung von
Kontonr.");
vonKonto = kontoArray[Integer.parseInt(eingabe)];
eingabe = JOptionPane.showInputDialog("...nach Kontonr.");
nachKonto = kontoArray[Integer.parseInt(eingabe)];
eingabe = JOptionPane.showInputDialog("Betrag:");
betrag
g = Double.parseDouble(eingabe);
p
g
//Überweisung durchführen:
vonKonto.ueberweisen(nachKonto, betrag);
//Ausgabe:
ausgabe = "Kontostand von Kontonr." + vonKonto.getKontoNr();
ausgabe += ": " + vonKonto.getSaldo() + " Euro \n";
ausgabe +
+= "Kontostand von Kontonr
Kontonr."+
"+ nachKonto
nachKonto.getKontoNr();
getKontoNr();
ausgabe += ": " + nachKonto.getSaldo() +" Euro";
JOptionPane.showMessageDialog(null,ausgabe);
System.exit( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 291
Die Deklaration eines Konstruktors
•
Konstruktoren sind Methoden zur Initialisierung von Objektattributen.
•
Konstruktoren heißen genau wie die Klasse.
•
Im Unterschied zu anderen Methoden wird bei ihnen kein Rückgabewert
deklariert.
•
Konstruktoren werden bei der Objekterzeugung mit dem new-Operator
aufgerufen.
•
Ein Konstruktor hat allgemein die Syntax:
KlassenName (Datentyp p1,…,Datentyp pn){
Anweisungen;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 292
Bemerkung zum Standardkonstruktor
•
Stellt der Compiler fest, dass kein Konstruktor programmiert wurde, so baut
der automatisch selbst einen in den Bytecode ein.
•
Diesen nennt man Standardkonstruktor.
•
Der Standardkonstruktor ist immer parameterlos.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 293
Das Schlüsselwort this
•
Der Bezeichner this dient dazu, auf das Objekt selbst zu verweisen
•
Auf eine eigene Methode oder ein eigenes Attribut kann man verweisen mit
der Syntax this.methode() bzw. this.attribut
•
Solange die Attributnamen nicht mehrdeutig sind, braucht this nicht
benutzt zu werden.
• this muss verwendet werden, wenn es Namenskonflikte mit gleichnamigen
lokalen Variablen gibt (s. kontoNr ist einmal das Attribut von Konto und
einmal der Name des Eingabeparameters des Konstruktors).
•
Bemerkung: Namenskonflikte könnten natürlich auch vermieden werden,
indem man der lokalen Variable einen anderen Namen gibt. In der Praxis
wird aber gerade bei Konstruktormethoden hiervon Abstand genommen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 294
Noch ein Beispiel für das Arbeiten mit Objekten
Problembeschreibung: Ein Computerprogramm soll die Laufzeiten der
Teilnehmer eines Rennens ermitteln. Eingegeben werden Startzeit und
Ankunftszeit eines Läufers
Läufers.
Version 1.0: Zunächst sollen die Zeiten in vollen Stunden angegeben werden.
Die Software wird mit Hilfe der drei Phasen entwickelt:
Analyse: Anforderungen an die Software ermitteln und beschreiben
(Verwendung von Klassendiagrammen)
Entwurf: Aufbauend auf der Analyse, die Softwarearchitektur und die
Spezifikation der Komponenten erstellen (insb. Algorithmen der Methoden)
Implementierung: Codierung der Klassen und Programme
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 295
/*
Die Klasse ermöglicht die Berechnung die Gesamtlaufzeit eines Läufers
*/
class Laeufer{
//Attribute
private int startZeit, ankunftsZeit, laufDauer;
//Konstruktor:
Laeufer(int startZeit, int ankunftsZeit){
this.startZeit = startZeit;
this.ankunftsZeit = ankunftsZeit;
}
i t getLaufDauer
int
tL fD
(){
laufDauer = ankunftsZeit - startZeit;
return laufDauer;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 296
Die zugehörige Applikation des Beispiels
import javax.swing.JOptionPane;
class LaufZeitApp{
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
int start, ankunft, dauer;
//Einlesen der Eingabestrings:
ersteEingabe = JOptionPane.showInputDialog ("Gib die
Startzeit des Läufers ein:");
zweiteEingabe = JOptionPane.showInputDialog ("Gib die
Ankunftzeit ein:");
//Konvertierung String in int:
start = Integer.parseInt(ersteEingabe);
ankunft = Integer.parseInt(zweiteEingabe);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 297
//Erzeugung eines speziellen Läufers mit start,ankunft-Zeit
Laeufer teilnehmer = new Laeufer(start,ankunft);
//Berechnung Laufdauer
dauer = teilnehmer.getLaufDauer();
//Erzeugung Ausgabestring
ausgabe = "Die Laufzeit betraegt " +dauer + " Stunden.";
//Ausgabe auf dem Bildschirm
JOptionPane.showMessageDialog (null, ausgabe);
System.exit( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 298
Version 2.0: Genauere Zeitangaben
Die Laufzeit soll ebenfalls mit Stunde, Minute und Sekunde ausgegeben
werden.
Die Eingabe der Zeiten soll im Format hh:mm:ss erfolgen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 299
import javax.swing.JOptionPane;
class LaufZeitApp {
public static void main (String args[]){
String ersteEingabe, zweiteEingabe, ausgabe;
Uhrzeit start, ankunft;
String dauer;
//Einlesen der Eingabestrings:
ersteEingabe = JOptionPane.showInputDialog ("Startzeit
(hh:mm:ss)");
zweiteEingabe = JOptionPane.showInputDialog ("Ankunftszeit
(hh:mm:ss)");
//Erzeugung zweier Objekte der Klasse Uhrzeit:
start = new Uhrzeit (ersteEingabe);
ankunft = new Uhrzeit (zweiteEingabe);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 300
//Erzeugung eines speziellen Läufers
Laeufer teilnehmer = new Laeufer(start,ankunft);
//Berechnnung Laufdauer:
dauer = teilnehmer.getLaufDauer();
//erzeuge Ausgabestring:
ausgabe = "Die Laufzeitzeit betraegt " +dauer ;
//Ausgabe auf dem Bildschirm
JOptionPane.showMessageDialog (null, ausgabe);
System.exit( 0 );
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 301
/*
Die Klasse ermöglicht die Berechnung der Laufzeit eines Laeufers
*/
class Laeufer{
//Attribute
private Uhrzeit startZeit, ankunftsZeit;
private
i t String
St i
l
laufDauer;
fD
//Konstruktor
Laeufer(Uhrzeit startZeit, Uhrzeit ankunftsZeit){
this.startZeit = startZeit;
this.ankunftsZeit = ankunftsZeit;
}
//Methode
String getLaufDauer (){
laufDauer = ankunftsZeit.minus(startZeit);
return laufDauer;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 302
//Die Klasse ermöglicht die Berechnung der Zeiten im Format hh:mm:ss
class Uhrzeit{
//Attribute
private int stunde, minute, sekunde;
//Konstruktor
Uhrzeit (String text) {
stunde = Integer.parseInt (text.substring(0,2));
minute = Integer.parseInt (text.substring (3,5));
sekunde = Integer.parseInt (text.substring (6,8));
}
//Methoden
int rechneInSekunden() {
int sekundenZeit; //Uhrzeit in Sekunden (lokale Variable)
sekundenZeit = sekunde;
sekundenZeit = sekundenZeit + 60*minute;
sekundenZeit = sekundenZeit + 3600*stunde;
return sekundenZeit;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 303
String minus (Uhrzeit zeit){
//subtrahiert die Uhrzeit zeit und gibt String in h,m,s zurueck
int differenz, diffStunde, diffMinute, diffSekunde;
String rueckgabe ="";
differenz = rechneInSekunden() - zeit.rechneInSekunden();
diffStunde = differenz / 3600;
differenz = differenz % 3600;
diffMinute = differenz / 60;
diffSekunde = differenz % 60;
rueckgabe += diffStunde + " h ";
rueckgabe += diffMinute + " min ";
rueckgabe += diffSekunde +" sec ";
return rueckgabe;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 304
Die Methode substring()
Sie ist definiert durch substring (int beginn, int ende).
Sei text ein String. Dann liefert der Methodenaufruf
text.substring(3,5), einen Teilstring, der aus dem 4. bis 5. Element von
text besteht (Strings beginnen mit dem Index 0).
Beispiel:
String text = “HALLO“;
S i
String
text2
2 = text.substring(0,2);
b
i (0 2)
ergibt text2 = “HA“;
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 305
Referenzdatentypen im Vergleich zu primitiven Datentypen
In JAVA gibt es fundamentale Unterschiede zwischen Objekten und Daten
vom primitiven Datentyp,
d. h. int, double, boolean, char, long, float.
•
Eine Variable eines primitiven Datentyps kann nur genau einen Wert zu
einem bestimmten Zeitpunkt annehmen
•
Objekte bestehen aus Daten, d. h. aus Objekten oder primitiven Datentypen
und
u
d haben
abe Methoden.
et ode
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 306
•
Variablen vom primitiven Datentyp belegen einen bestimmten Platz im
Speicher. Bei Verwendung im Programm wird ihr Wert kopiert und
verarbeitet (Bsp. int a = 5; int b = a).
•
Eine Variable, die ein Objekt darstellt, ist dagegen eine Referenz auf den
Speicherort, an dem sich das Objekt befindet, also seine Speicheradresse.
Man nennt sie daher Referenzdatentypen.
•
Bei Verwendung im Programm wird die Referenz übergeben.
Das nächste Programm veranschaulicht den Unterschied zwischen
Referenzdatentypen und primitiven (elementaren) Datentypen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 307
Eine Klasse IntZahlen sei wie folgt definiert:
public class IntZahlen {
//Attribut
;
int zahl;
//Konstruktor
IntZahlen ( int zahl) {
this.zahl = zahl;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 308
import javax.swing.*;
public class VergleichDatenTypen {
public static void main (String args[]) {
IntZahlen zahl1, zahl2;
int x, y;
String ausgabe;
//primitive Datentypen
x = 1;
y = x;
y = 2;
//Objekte
zahl1 = new IntZahlen (1);
zahl2 = zahl1;
zahl2.zahl = 2;
//Ausgabe
ausgabe = "x
x = "+
+ x +"\ny
+ \ny = " +y;
ausgabe += "\nWert der Zahl des Objektes zahl1: " + zahl1.zahl;
ausgabe += "\nWert der Zahl des Objektes zahl2: " + zahl2.zahl;
JOptionPane.showMessageDialog ( null, ausgabe) ;
System.exit (0);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 309
Die Applikation erzeugt die folgende Ausgabe
•
Da x und y primitive Datentypen sind, wird durch y = x der Wert kopiert.
Eine Veränderung von y führt daher nicht zu einer Veränderung von x.
• zahl1
hl1 und
d zahl2
hl2 sind
i d vom Datentyp
D t t IntZahlen,
hl
also
l von einem
i
Referenzdatentyp. Somit wird durch zahl2 = zahl1 bewirkt, dass beide
Variablen auf das selbe Objekt zeigen und dieses verändern können.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 310
Gleichheit von Objekten und die Methode equals()
Durch objekt1 == objekt2 werden die Referenzen auf die Objekte
miteinander verglichen.
Möchte man aber die Inhalte zweier Objekte miteinander vergleichen, so kann
die Methode equals() verwendet werden.
string1.equals(string2) ist true, wenn die beiden Strings string1 und
string2 identisch sind.
objekt1.equals(objekt2) ist dagegen true, wenn die Referenzen
übereinstimmen.
Um die Inhalte auf Gleichheit zu Überprüfen müssen die einzelnen Attribute
explizit angegeben werden bzw. die Methode equals() überschrieben werden.
Beispiel: objekt1.name.equals(objekt2.name)
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 311
Garbage Collection (Müllsammlung)
•
Werden Objekte mit new angelegt, so wird im Hauptspeicher Platz für diese
Objekte bereitgestellt.
•
Im Gegensatz zu anderen Programmiersprachen wird dieser Speicherplatz
wieder freigegeben, sobald er nicht mehr benötigt wird.
•
Diese Freigabe geschieht, indem eine sog. garbage collection automatisch
durchgeführt wird.
•
Die garbage collection startet dann, wenn JAVA Speicherplatz benötigt.
•
Man kann sie auch explizit mit System.gc() aufrufen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 312
Exceptions
•
Exceptions sind in JAVA Objekte. Man unterscheidet zwischen
•
Error: schwerer Systemfehler
•
Exception: „normaler Fehler“, der vom Programm kontrolliert werden
kann
•
Eine „Ausnahme“ oder Exception zeigt an, dass ein Problem während der
Ausführung eines Programms aufgetaucht ist, z. B. Division durch 0,
Bereichsüberschreitung von Array-Indizes, Nichtkompatible Datentypen beim
Typumwandeln, unbekannte Datei beim Lesen,....
•
Solche Fehler bringen ein Programm meist zum Absturz, wenn sie nicht
abgefangen werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 313
Beispiele für Exceptions
Werden die Array Grenzen nicht eingehalten (s. Programmbeispiel), so wird
zur Laufzeit die folgende Exception erzeugt und das Programm wird beendet.
class ArrayGrenzen{
public static void main (String args[]) {
int a[] = new int [10];
//Initialisierung
for(int i = 0;i< a.length;i++)
a[i] = i
i*i;
i;
for (int i = a.length; i>=0;i--)
System.out.println (a[i]);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 314
Wird im Programm durch 0 dividiert, so wird zur Laufzeit die folgende
Exception erzeugt und das Programm wird beendet.
Falsche Formate erzeugen eine NumberFormatException
class Cast{
public static void main (String args[]) {
String s1="12", s2 = "a";
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 315
•
Exceptions sind Objekte der Klasse Exception aus dem Paket java.lang
oder einer Unterklasse (z. B. NumberFormatException).
•
Errors sind Objekte der Klasse Error.
•
Die Klassen Exception sowie Error sind Unterklassen von Throwable.
Throwable
•
„Ausnahmen“, die von Error oder von RuntimeException abgeleitet sind,
sind unkontrollierte Ausnahmen
•
Alle anderen „Ausnahmen“ sind kontrollierte Ausnahmen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 316
Exception Handling
•
Eine Ausnahme Behandlung kann in JAVA durch eine Kombination von einem
try- (Versuchen) mit einem oder mehreren catch- (Abfangen) Codeblöcken
erfolgen. Der try-Block legt den Programmbereich fest, der überwacht wird, d.
h. der eine Ausnahme erzeugen/auswerfen könnte.
try{
Anweisungen, die eine Ausnahme verursachen können;
}catch (Ausnahmetyp e1){
g zum Reagieren
g
und Beheben;;
Anweisungen
}catch (Ausnahmetyp e2){
Anweisungen zum Reagieren und Beheben;
}…weitere catches
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 317
Das folgende Programm reagiert auf den Laufzeitfehler im Programm Cast.java
class Cast2{
public static void main (String args[]) {
String s1="12", s2 = "a", s3 = "9";
int i1,i2,i3 ;
i1= i2 = i3 = 0;
try{
i1 = Integer.parseInt(s1);
i2 = Integer.parseInt(s2);
i3 = Integer.parseInt(s3);
}catch(NumberFormatException e){
System.out.println("Keine Zahl");
}
System.out.println(i1+i2+i3);
System.out.println(i1*i3);
System.out.println(i1
i3);
}
}
Das Programm liefert die Ausgabe
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 318
Optional kann nach dem catch-Block ein finally-Block folgen.
Der Teil im finally Block wird immer ausgeführt, auch wenn in try und
catch ein return, break, oder continue steht.
y
lautet dann
Die Syntax
try{
Anweisungen, die eine Ausnahme verursachen können;
}catch (Ausnahmetyp e1){
Anweisungen zum Reagieren und Beheben;
}
…weitere catches
finally {
Anweisungen;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 319
Die folgende Applikation Wochentag2.java fängt Fehler der Kategorie
ArrayIndexOutOfBoundsException und NumberFormatException sowie
eine Exception, die durch das Klicken des Abbruch-Buttons erzeugt wird.
Hier wird der Fehler explizit mit der throw-Anweisung ausgeworfen.
Eine Exception kann mit throw new Ausnahmetyp(); geworfen (erzeugt)
werden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 320
import javax.swing.JOptionPane;
class Wochentag2{
public static void main (String args[]) {
String eingabe, ausgabe; int zahl;
String wochentag[] =
{ Sonntag , Montag , Dienstag , Mittwoch ,
{"Sonntag","Montag","Dienstag","Mittwoch",
"Donnerstag","Freitag","Samstag"};
while (true){
try{
eingabe = JOptionPane.showInputDialog ("Eingabe
Wochentag");
if (eingabe == null)
//User klickt "abbrechen"
throw new Exception ("Ende");
int hilf = Integer.parseInt(eingabe);
zahl = hilf-1;
//Tag 1 ist Sonntag, Tag 7 ist Samstag
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 321
ausgabe = "Der Tag "+hilf+" ist ein“+wochentag[zahl];
JOptionPane.showMessageDialog(null,ausgabe);
}catch (ArrayIndexOutOfBoundsException ab){
JOptionPane.showMessageDialog(null, "kein Wochentag");
}
catch (NumberFormatException nfe){
JOptionPane.showMessageDialog(null,"keine Zahl!");
}
catch (Exception e){
JOptionPane.showMessageDialog(null,"Tschuess");
System.exit(0);
y
}
}
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 322
throws im Methodenkopf angeben
Neben dem Einzäunen von problematischen Blöcken durch einen try- und catchBlock gibt es noch eine andere Möglichkeit auf Exceptions zu reagieren:
Im Methodenkopf wird eine throws-Klausel eingeführt.
Beispiel String readFirstLineFromFile (String filename)
throws java.io.IOException{ ….};
Dadurch zeigt eine Methode an, dass sie möglicherweise eine Exception
auswerfen wird, aber diese nicht selbst behandelt, sondern diese unter
Umständen an die aufrufende Methode weitergibt
weitergibt.
Eine Methode muss alle kontrollierten Ausnahmen, die sie auslösen kann, auch
deklarieren. (D.h. Ausnahmen, die von der Klasse Error und
RuntimeException abgeleitet sind, müssen nicht angekündigt werden).
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 323
Vererbung
•
Die Vererbung ist eines der wesentlichsten Konzepte der
Objektorientierung.
•
Vererbung ist ein Mechanismus, der es erlaubt, bestehenden
Programmcode zu benutzen und ihn den eigenen Bedürfnissen
anzupassen.
•
Die abgeleitete Klasse, d. h. die Subklasse übernimmt die Attribute und
Methoden der Elternklasse (Superklasse).
•
Die Subklasse kann selbst entscheiden,, welche Attribute und Methoden
sie übernehmen will und welche sie hinzufügen bzw. überschreiben will.
•
In JAVA kann jede Subklasse nur eine Superklasse haben. Man spricht
von Einfachvererbung.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 324
•
Im folgenden Beispiel ist die Klasse Abteilungsleiter eine Subklasse von
Mitarbeiter.
•
Dies wird durch das reservierte Wort extends im Kopf der Klasse
ausgedrückt. class Abteilungsleiter extends Mitarbeiter
•
Ein Objekt der Klasse Abteilungsleiter kann damit die Attribute und
Methoden von Mitarbeiter nutzen. Im Beispiel wird ein zusätzliches
Attribut eingesetzt sowie zwei Methoden hinzugefügt.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 325
public class Mitarbeiter{
private String name;
private int personalNummer;
private double gehalt;
}
void setName (String name){
this.name = name;
}
void
id setPersonalnummer(int
tP
l
(i t personalNummer){
lN
){
this.personalNummer = personalNummer;
}
void setGehalt (double gehalt){
this.gehalt = gehalt;
}
void drucke () {
System.out.print("\nName: " + name);
System.out.print ("\tPersonalnummer: " + personalNummer);
y
p
( \
" + g
gehalt);
);
System.out.print("\tGehalt:
}
void erhoeheGehalt (double betrag){
gehalt += betrag;
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 326
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
//Methoden
void setAbteilung (String abteilung){
this abteilung = abteilung;
this.abteilung
}
void ausgabeAbteilung () {
System.out.println ("\tLeiter Abteilung: " + abteilung);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 327
public class MitarbeiterApplikation{
public static void main(String args[]){
Mitarbeiter uwe = new Mitarbeiter();
uwe.setName("Maier");
uwe.setPersonalnummer(13);
uwe.setGehalt(2000);
uwe drucke();
uwe.drucke();
Abteilungsleiter anja = new Abteilungsleiter();
anja.setName ("Mueller");
anja.setPersonalnummer ( 25);
anja.setGehalt ( 4030);
anja.setAbteilung ("F3O Projekte");
anja.erhoeheGehalt (300);
anja.drucke();
anja.ausgabeAbteilung ();
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 328
Die Applikation liefert die Ausgabe
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 329
Methoden überschreiben
Es ist auch möglich, bestehende Methoden in der Subklasse zu
überschreiben.
Beim Überschreiben definiert man eine Methode in der Subklasse exakt so,,
wie sie in der Elternklasse definiert ist. Wird die Methode in der Kindklasse
aufgerufen, wird nicht die geerbte Methode der Elternklasse (Superklasse)
sondern die der Kindklasse benutzt.
Im nächsten Beispiel wird die Methode drucke()
d
k () überschrieben.
überschrieben
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 330
Mit dem reservierten Wort super kann auf die Methoden und Attribute der
Mutterklasse zugegriffen werden.
Im Beispiel ist allerdings ein super.gehalt nicht möglich, da die Attribute in
der Superklasse mit private geschützt sind.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 331
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
void setAbteilung (String abteilung){
this.abteilung = abteilung;
}
//Methode drucke() wird überschrieben
void drucke () {
super.drucke();
System.out.println ("\tLeitung Abteilung: " +abteilung);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 332
Das Arbeiten mit Konstruktoren
Im nächsten Beispiel ändern wir nun die Klassen, indem wir Konstruktoren
verwenden.
g den
Der Konstruktor der Subklasse muss als erste Anweisung
Konstruktoraufruf der Suberklasse haben. Dieser Aufruf erfolgt auch mit
super, im Beispiel
super (name,personalNummer,gehalt);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 333
public class Mitarbeiter{
//Attribute:
private String name;
private int personalNummer;
private double gehalt;
//Konstruktor:
public Mitarbeiter(String name, int personalNummer, double gehalt){
this.name = name;
thi
this.personalNummer = personalNummer;
this.gehalt = gehalt;
}
//Methoden:
public void drucke () {
System.out.println();
System.out.print ("Name: " + name);
System.out.print ("\tPersonalnummer: " + personalNummer);
System.out.print("\tGehalt: " + gehalt);
}
public void erhoeheGehalt (double betrag){
gehalt += betrag;
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 334
public class Abteilungsleiter extends Mitarbeiter{
//Attribute:
private String abteilung; //zusätzliches Attribut
//Konstruktor
public Abteilungsleiter (String name, int personalNummer,
double gehalt, String abteilung) {
//Aufruf des Konstrukors von Mitarbeiter
super (name, personalNummer,gehalt);
this.abteilung = abteilung;
}
public void drucke () {
super.drucke();
System.out.println ("\tAbteilung: " + abteilung);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 335
public class MitarbeiterApplikation{
public static void main(String args[]){
Mitarbeiter uwe = new Mitarbeiter("Maier", 13, 2000);
Abteilungsleiter anja = new Abteilungsleiter ("Mueller",
25,4030,"F30 Projekte");
uwe.drucke();
anja.erhoeheGehalt(300);
j
h h G h lt(300)
anja.drucke();
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 336
Die Speicherung in einem Array ergibt
public class PersonalVerwaltung{
public static void main(String args[]){
Mitarbeiter personal [] ={new Mitarbeiter("Maier", 13, 2000),
ne Abteilungsleiter
new
Abteil ngsleite ("M
("Mueller",
elle " 25
25,4030,"F30
4030 "F30 P
Projekte")};
ojekte")}
for (int i = 0;i < personal.length; i++)
personal[i].drucke();
}
}
Beim Aufruf der Methode drucke() wird unterschieden, ob es sich um
ein Objekt
j
Mitarbeiter oder Abteilungsleiter
g
handelt.
Dies bezeichnet man als späte Bindung bzw. Polymorphie.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 337
Späte Bindung - Polymorphie
Hat eine Unterklasse eine Methode der Elternklasse überschrieben, so wird erst
zur Laufzeit dynamisch die entsprechende Objektmethode, passend zum
tatsächlichen Typ des aufrufenden Objekts, ausgewählt.
Die späte Bindung ist eine Anwendung der Polymorphie, wird aber hier synonym
verwendet.
Beispiel: personal[0] und personal[1] sind beide vom Datentyp
Mitarbeiter. personal[1] ist jedoch ein Objekt einer Unterklasse von
Mitarbeiter, nämlich von Abteilungsleiter. Sowohl Mitarbeiter als
auch Abteilungsleiter verfügen über eine Methode drucke(). Erst zur
Laufzeit wird diese Methode gebunden, d. h. erst dann wird entschieden, dass
zu personal[1] die Methode drucke() von Abteilungsleiter gehört.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 338
Bemerkung zur Polymorphie
Polymorphie existiert nicht bei privaten (private), statischen (static) und
finalen (final) Methoden.
final-Methoden
final
Methoden können nicht überschrieben werden und sind daher nicht
polymorph gebunden.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 339
Welche Ausgabe liefert die folgende Applikation?
class Klasse1{
public Klasse1(){
System.out.println("Konstruktor Klasse1");
}
public Klasse1 (int dummy){
System.out.println("Konstruktor mit dummy Klasse1");
}
}
class Klasse2 extends Klasse1{
public Klasse2(){
System.out.println("Konstruktor Klasse2");
}
public Klasse2 (int dummy){
super (dummy);
System.out.println("Konstruktor mit dummy Klasse2");
}
}
public class Konstruktor {
public static void main (String args[]){
Klasse2 k = new Klasse2();
Klasse2 l = new Klasse2(1);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 340
Die Klasse Object
•
Die Klasse Object ist in der Vererbungshierarchie die höchste Klasse.
Sie ist die Elternklasse für alle anderen Klassen.
•
p
Immer wenn eine Klasse definiert wird,, dabei aber keine explizite
Ableitung mittels extends angegeben wird, fügt JAVA automatisch
extends Object hinzu.
•
Eine Methode der Klasse Object, die wir bereits kennen gelernt haben
ist:
equals(Object)
l (Object)
Überprüfung auf Gleichheit
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 341
Zeichenketten: Die Klassen String und StringBuffer
•
Strings, d. h. Zeichenketten sind in JAVA Objekte.
•
In JAVA gibt es zwei Klassen von Strings, dies sind die Klassen String
und StringBuffer.
g
•
Objekte der Klasse String stellen Zeichenketten mit fester Länge, d. h.
konstante Zeichenketten, dar.
•
Objekte der Klasse StringBuffer stellen Zeichenketten dar, die zur
Laufzeit des Programms verkürzt oder verlängert werden können. Zudem
gibt es verschiedene Methoden zur Textbearbeitung
Textbearbeitung.
•
Die Klassen String und StringBuffer sind aus dem Paket
java.lang
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 342
Die Klasse String
Objekte der Klasse sind konstante Zeichenketten.
Sie haben folgende Eigenschaften:
werden
• Die Länge eines Strings steht fest und kann nicht mehr verändert werden.
• Der Inhalt des Strings kann nicht verändert werden. D.h. alle Methoden aus der
Klasse String, die zur Manipulation auf das String Objekt angewendet werden,
geben eine entsprechend manipulierte Kopie des Strings zurück.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 343
Eine konstante Zeichenkette mit beispielsweise dem Inhalt „Peter“ wird entweder
durch die Anweisung
String name = "Peter";
oder durch
ode
du c die
d e Anweisung
e su g
String name = new String("Peter");
erzeugt.
name ist also in beiden Fällen eine Referenz auf ein Objekt.
j
Im ersten Fall spricht man von einer impliziten Erzeugung eines String-Objektes.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 344
Der Unterschied ist, dass im zweiten Fall durch den new-Operator auf jeden
Fall ein neues String-Objekt erzeugt wird und damit Speicher belegt wird.
g der Fall sein.
Im ersten Fall muss dies nicht unbedingt
Bei optimierenden Compilern können String-Objekte, die den gleichen Inhalt
haben und implizit erzeugt werden, wieder verwendet werden.
Beispiel: Durch
String name = "Peter";
String name2 = "Peter";
erzeugen optimierende Compiler nur ein Objekt, auf das die zwei Referenzen
name und name2 beide zeigen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 345
Zur Erinnerung:
Strings werden mit der Methode equals() verglichen.
if (name.equals(name2))
…….
vergleicht die Inhalte der beiden Strings name und name2.
Auf den nächsten Folien werden einige weitere String-Methoden erläutert
(schauen
(sc
aue S
Sie
eb
bitte
tte auc
auch in de
der API nach).
ac )
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 346
Länge eines Strings durch length()
Die Methode length() ermittelt die Länge eines Strings.
String a = "Grundlagen";
int l = a.length();
ergibt l = 10
Zeichen ersetzen mit replace()
Die Methode erzeugt ein neuen String indem die Zeichen aus dem Original ersetzt
wurden.
String s1 = "JAVA";
String s2 = s1.replace('a', 'A' );
liefert für s2 JAvA, d. h. das a wurde in A verändert. s1 bleibt unverändert.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 347
Stringteile extrahieren mit substring()
Die Methode substring(a,b) liefert einen neuen String als Teilstring des
Originals. a gibt die Startposition an, b die erste Position, die nicht mehr zum
Substring gehören soll.
String subtitel = thema.substring(1,3);
System.out.println(subtitel); ergibt als Ausgabe
av
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 348
Anfang und Ende des Strings mit startsWith() und endsWith()
Die Methode startsWith(anfang) überprüft, ob der String mit anfang anfängt.
String titel = "Titel: Grundlagen der Informatik";
boolean s = titel.startsWith("Titel");
S t
System.out.println(s);
t
i tl ( )
ergibt also true.
Die Methode endsWith(ende) überprüft, ob der String mit ende aufhört.
boolean ende = titel.endsWith (
("Informatik");
)
System.out.println(ende);
ergibt true.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 349
Zeichen im String suchen mit indexOf()
Die Methode indexOf(zeichen) gibt die Position aus, an der das zeichen das
erste mal im String vorkommt. Mit String thema = "JAVA";
int p = thema.indexOf ('a');
ergibt sich für p der Wert 1.
Ist das Zeichen im String nicht enthalten, so liefert die Methode den Wert –1.
Suchen eines Zeichens ab einer bestimmten Position wird durch Angabe eines
weiteren Parameters ermöglicht:
int p = thema.indexOf ('a'‚2);
ergibt für p den Wert 3.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 350
Ist eine Zeichenfolge im String vorhanden?
Seit JAVA 1.5 ist es mit Hilfe der Methode contains(zeichenkette) möglich,
innerhalb eines String eine Zeichenkette zu suchen. Die Methode gibt true zurück,
falls die Zeichenkette im String vorhanden ist und false, falls nicht.
String s = "Informatik";
s.contains("for");
ergibt true.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 351
Vergleich zweier Strings auf „Größe“ mit compareTo()
Durch den Methodenaufruf string1.compareTo(string2) werden die beiden
Strings string1 und string2 auf ihre lexikographische Größe verglichen.
Der Rückgabewert
g
ist vom Datentyp
yp int. Er ist 0 bei Gleichheit,, negativ,
g , falls
string1 lexikographisch kleiner ist als string2 und positiv, falls string1
lexikographisch größer als string2 ist.
String string1 = "Peter", string2 = "Tina",
string3 = "Peter" , string4 = "Andrea";
Dann ist
string1.compareTo(string2);
kleiner als 0
string1.compareTo(string3);
gleich 0
string1.compareTo(string4); größer als 0
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 352
Die Klasse StringBuffer
StringBuffer-Objekte sind Zeichenketten mit folgenden Eigenschaften:
•
Die Länge der Zeichenkette ist nicht festgelegt. Sie vergrößert sich
g
j
weitere Zeichen angefügt
g g werden
automatisch,, wenn im StringBuffer-Objekt
und der vorhandene Platz nicht ausreicht.
•
Der Inhalt einer Instanz der Klasse StringBuffer lässt sich verändern.
D.h. die Methoden aus der Klasse StringBuffer, die zur Manipulation auf
das StringBuffer Objekt angewendet werden, manipulieren das StringBuffer
Objekt
j
selber und g
geben es zusätzlich zurück.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 353
Das Erzeugen eines StringBuffer-Objektes
StringBuffer-Objekte müssen immer mit Hilfe des new-Operators erzeugt
werden.
Es g
gibt insgesamt
g
drei Konstruktoren für die Klasse StringBuffer.
g
• StringBuffer()
Erzeugt StringBuffer-Objekt, das zunächst 16 Zeichen aufnehmen kann
• StringBuffer(int length)
Erzeugt StringBuffer-Objekt, das length Zeichen aufnehmen kann
• StringBuffer(String str)
Es wird ein StringBuffer-Objekt erzeugt und mit einer Kopie des Strings
str initialisiert. Zusätzlich wird bereits Platz für 16 weitere Zeichen
eingeplant.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 354
Die Länge eines StringBuffer-Objektes lesen und setzen
Unterschieden wird zwischen den Methoden length() und capacity().
•
Die Methode length() ermittelt die Anzahl der enthaltenen Zeichen.
•
Die Methode capacity()
it () ermittelt die Kapazität,
Kapazität d.
d h.
h den gesamten
Speicherplatz ( belegter und freier Speicherplatz). Diese Kapazität wird
automatisch angepasst, wenn weitere Zeichen eingebaut werden. Man kann
sie aber auch manuell einstellen.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 355
Beispiel
StringBuffer text1 = new StringBuffer();
StringBuffer text2 = new StringBuffer(20);
StringBuffer text3 = new StringBuffer("Vorlesung");
System.out.println(text1);
System.out.println(text1.length());
System.out.println(text1.capacity());
//Ausgabe 0
//Ausgabe 16
System.out.println(text2);
System.out.println(text2.length());
System.out.println(text2.capacity());
//Ausgabe 0
//Ausgabe 20
System.out.println(text3);
System.out.println(text3.length());
S t
System.out.println(text3.capacity());
t
i tl (t t3
it ())
//Ausgabe „Vorlesung“
//Ausgabe 9
//A
//Ausgabe
b 25
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 356
Zeichen anhängen, einfügen, löschen
•
Die Methode append() hängt Werte an eine Zeichenkette an. Der interne
Platz wird dabei –falls nötig- automatisch vergrößert. Ein neues StringBufferObjekt wird nicht erzeugt.
•
Durch die Methode insert() können Zeichenketten und primitive
Datentypen an einer beliebigen Stelle eingefügt werden. Der erste Parameter
der Methode gibt die gewünschte Position an (1. Zeichen hat Position 0). Der
zweite Parameter gibt den Inhalt an.
•
Die Methode setCharAt()
() überschreibt einzelne Zeichen. Der erste
Parmameter gibt die Position des zu ersetzenden Zeichens an, der zweite
Parameter gibt das neue Zeichen an.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 357
•
Die Methode reverse() dreht die Reihenfolge der Zeichen um.
•
Die Methode delete() löscht einen Teil der Zeichenkette. Der erste
Parameter gibt die Position des ersten zu löschenden Zeichens an, der zweite
Parameter gibt die Position des ersten Zeichens an, das nicht mehr gelöscht
werden soll.
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 358
Beispiel
class BeispielStringBuffer{
public static void main (String args[]){
StringBuffer text3 = new StringBuffer("Vorlesung");
text3.append(" JAVA");
System.out.println(text3);
text3.insert(9," Ueber");
System.out.println(text3);
Ausgabe des
Programms
text3.setCharAt(10,'u');
System.out.println(text3);
text3.reverse();
System.out.println(text3);
text3.delete(4,10);
System.out.println(text3);
}
text3.reverse().append(" Teil").append(" 2");
System.out.println(text3);
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 359
Vergleiche von Zeichenketten als String und StringBuffer
Um zwei StringBuffer-Objekte bzw. ein StringBuffer- und ein String-Objekt auf
Gleichheit zu überprüfen, müssen die StringBuffer-Objekte in Strings
umgewandelt werden:
•
Umwandeln des/der StringBuffer-Objekte in Strings mit Hilfe der Methode
toString() und danach Vergleich mit equals():
StringBuffer text1 = new StringBuffer("JAVA");
String text2 = "JAVA";
System.out.println(text2.equals(text1.toString()));
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 360
Vergleiche von Zeichenketten als String und StringBuffer
Der Vergleich eines StringBuffer-Objektes mit einem String kann seit Version 1.4
auch mit Hilfe der Methode contentEquals() erfolgen:
Benutzung der Methode contentEquals(StringBuffer)
t tE
l (St i B ff )
•
System.out.println(text2.contentEquals(text1));
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 361
Ein weiteres Beispiel
Testen, ob der String s ein Palindrom ist.
Palindrome lesen sich vorwärts genauso wie rückwärts, z. B. OTTO
import javax.swing.*;
class Palindrom{
public static void main (String args[]){
String s = JOptionPane.showInputDialog (null,
"Geben Sie einen String ein");
boolean isPalindrom =
s.contentEquals(new StringBuffer(s).reverse());
if (isPalindrom)
System.out.println(s+"
S stem o t println(s+" ist ein Palindrom");
Palind om")
else
System.out.println (s +" ist kein Palindrom");
System.exit(0);
}
}
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 362
Bemerkung zum Palindrom-Beispiel
Die Zeile
boolean isPalindrom =
s.contentEquals(new StringBuffer(s).reverse());
kann auch ersetzt werden durch
boolean isPalindrom =
new StringBuffer(s).reverse().toString().equals(s);
Vorlesung Informatik, 1. Teil
WiSe 2011/2012
Seite 363
Herunterladen