Kapitel 3: Imperative Programmierung in Java
Kapitel 3: Imperative Programmierung in Java
Kapitel 3: Imperative Programmierung in Java
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Imperative</strong> <strong>Programmierung</strong> <strong>in</strong> <strong>Java</strong><br />
Algorithmen und Datenstrukturen II 1
M<strong>in</strong>i-<strong>Java</strong><br />
E<strong>in</strong> M<strong>in</strong>i-<strong>Java</strong> Programm besteht aus genau e<strong>in</strong>er Klasse. In dieser Klasse gibt es<br />
genau e<strong>in</strong>e ma<strong>in</strong>-Methode. Folgende Konstrukte s<strong>in</strong>d Anweisungen (statements<br />
gemäß M<strong>in</strong>i-<strong>Java</strong>-Syntax, vgl. Beispiel ??):<br />
Algorithmen und Datenstrukturen II 2
M<strong>in</strong>i-<strong>Java</strong><br />
E<strong>in</strong> M<strong>in</strong>i-<strong>Java</strong> Programm besteht aus genau e<strong>in</strong>er Klasse. In dieser Klasse gibt es<br />
genau e<strong>in</strong>e ma<strong>in</strong>-Methode. Folgende Konstrukte s<strong>in</strong>d Anweisungen (statements<br />
gemäß M<strong>in</strong>i-<strong>Java</strong>-Syntax, vgl. Beispiel ??):<br />
1. Die Deklaration e<strong>in</strong>er Variablen vom Typ <strong>in</strong>t mit sofortiger Initialisierung:<br />
<strong>in</strong>t ident = expression;<br />
Jeder Bezeichner (ident) darf <strong>in</strong> höchstens e<strong>in</strong>er Variablendeklaration<br />
vorkommen. Diese kontextsensitive Bed<strong>in</strong>gung lässt sich nicht <strong>in</strong> der<br />
EBNF-Def<strong>in</strong>ition formulieren.<br />
Algorithmen und Datenstrukturen II 2
M<strong>in</strong>i-<strong>Java</strong><br />
E<strong>in</strong> M<strong>in</strong>i-<strong>Java</strong> Programm besteht aus genau e<strong>in</strong>er Klasse. In dieser Klasse gibt es<br />
genau e<strong>in</strong>e ma<strong>in</strong>-Methode. Folgende Konstrukte s<strong>in</strong>d Anweisungen (statements<br />
gemäß M<strong>in</strong>i-<strong>Java</strong>-Syntax, vgl. Beispiel ??):<br />
1. Die Deklaration e<strong>in</strong>er Variablen vom Typ <strong>in</strong>t mit sofortiger Initialisierung:<br />
<strong>in</strong>t ident = expression;<br />
Jeder Bezeichner (ident) darf <strong>in</strong> höchstens e<strong>in</strong>er Variablendeklaration<br />
vorkommen. Diese kontextsensitive Bed<strong>in</strong>gung lässt sich nicht <strong>in</strong> der<br />
EBNF-Def<strong>in</strong>ition formulieren.<br />
Algorithmen und Datenstrukturen II 2
2. Die Zuweisung e<strong>in</strong>es Wertes an e<strong>in</strong>e Variable:<br />
ident = expression;<br />
Diese Variable muss vorher deklariert worden se<strong>in</strong> und den gleichen Typ wie der<br />
Ausdruck haben. Diese Nebenbed<strong>in</strong>gung ist ebenfalls nicht <strong>in</strong> der<br />
EBNF-Def<strong>in</strong>ition ausgedrückt.<br />
Algorithmen und Datenstrukturen II 3
2. Die Zuweisung e<strong>in</strong>es Wertes an e<strong>in</strong>e Variable:<br />
ident = expression;<br />
Diese Variable muss vorher deklariert worden se<strong>in</strong> und den gleichen Typ wie der<br />
Ausdruck haben. Diese Nebenbed<strong>in</strong>gung ist ebenfalls nicht <strong>in</strong> der<br />
EBNF-Def<strong>in</strong>ition ausgedrückt.<br />
3. E<strong>in</strong>e bed<strong>in</strong>gte Anweisung (if-then Anweisung):<br />
if(condition) statement<br />
Der Bool’sche Ausdruck (condition) wird ausgewertet; ist er true, so wird die<br />
Anweisung (statement) ausgeführt. Ist er false, so wird die Anweisung nicht<br />
ausgeführt und die Programmausführung mit der nächsten Anweisung h<strong>in</strong>ter<br />
der if-then Anweisung fortgesetzt.<br />
Algorithmen und Datenstrukturen II 3
2. Die Zuweisung e<strong>in</strong>es Wertes an e<strong>in</strong>e Variable:<br />
ident = expression;<br />
Diese Variable muss vorher deklariert worden se<strong>in</strong> und den gleichen Typ wie der<br />
Ausdruck haben. Diese Nebenbed<strong>in</strong>gung ist ebenfalls nicht <strong>in</strong> der<br />
EBNF-Def<strong>in</strong>ition ausgedrückt.<br />
3. E<strong>in</strong>e bed<strong>in</strong>gte Anweisung (if-then Anweisung):<br />
if(condition) statement<br />
Der Bool’sche Ausdruck (condition) wird ausgewertet; ist er true, so wird die<br />
Anweisung (statement) ausgeführt. Ist er false, so wird die Anweisung nicht<br />
ausgeführt und die Programmausführung mit der nächsten Anweisung h<strong>in</strong>ter<br />
der if-then Anweisung fortgesetzt.<br />
4. E<strong>in</strong>e abweisende Schleife (while-Schleife):<br />
Algorithmen und Datenstrukturen II 3
while(condition) statement<br />
Der Bool’sche Ausdruck wird ausgewertet; ist er true, so wird die Anweisung<br />
so lange ausgeführt, bis der Bool’sche Ausdruck false wird.<br />
Algorithmen und Datenstrukturen II 4
while(condition) statement<br />
Der Bool’sche Ausdruck wird ausgewertet; ist er true, so wird die Anweisung<br />
so lange ausgeführt, bis der Bool’sche Ausdruck false wird.<br />
5. E<strong>in</strong> Block.<br />
{ statement1; statement2; . . . }<br />
Die Statements <strong>in</strong> der geschweiften Klammer werden von l<strong>in</strong>ks nach rechts<br />
nache<strong>in</strong>ander abgearbeitet.<br />
Algorithmen und Datenstrukturen II 4
while(condition) statement<br />
Der Bool’sche Ausdruck wird ausgewertet; ist er true, so wird die Anweisung<br />
so lange ausgeführt, bis der Bool’sche Ausdruck false wird.<br />
5. E<strong>in</strong> Block.<br />
{ statement1; statement2; . . . }<br />
Die Statements <strong>in</strong> der geschweiften Klammer werden von l<strong>in</strong>ks nach rechts<br />
nache<strong>in</strong>ander abgearbeitet.<br />
6. E<strong>in</strong>e Anweisung zum Schreiben auf der Standardausgabe:<br />
System.out.pr<strong>in</strong>tln(...);<br />
System ist e<strong>in</strong>e Klasse, die klassenbezogene Methoden zur Darstellung des<br />
Zustandes des Systems bereitstellt. out ist e<strong>in</strong>e Klassenvariable der Klasse<br />
System, ihr Inhalt ist der Standardausgabestrom. Die Methode pr<strong>in</strong>tln wird<br />
Algorithmen und Datenstrukturen II 4
also auf das klassenbezogene Datenfeld out angewendet – es wird e<strong>in</strong> Str<strong>in</strong>g<br />
mit abschließendem Zeilenvorschub auf dem Standardausgabestrom<br />
ausgegeben.<br />
Algorithmen und Datenstrukturen II 5
also auf das klassenbezogene Datenfeld out angewendet – es wird e<strong>in</strong> Str<strong>in</strong>g<br />
mit abschließendem Zeilenvorschub auf dem Standardausgabestrom<br />
ausgegeben.<br />
7. Die leere Anweisung.<br />
;<br />
Es geschieht nichts.<br />
Algorithmen und Datenstrukturen II 5
also auf das klassenbezogene Datenfeld out angewendet – es wird e<strong>in</strong> Str<strong>in</strong>g<br />
mit abschließendem Zeilenvorschub auf dem Standardausgabestrom<br />
ausgegeben.<br />
7. Die leere Anweisung.<br />
;<br />
Es geschieht nichts.<br />
8. Die Deklaration e<strong>in</strong>es e<strong>in</strong>dimensionalen Feldes (Arrays) mit sofortiger<br />
Initialisierung:<br />
<strong>in</strong>t[] array = new <strong>in</strong>t[3];<br />
deklariert e<strong>in</strong> Feld namens array, erzeugt e<strong>in</strong> Feld mit drei <strong>in</strong>t-Komponenten<br />
und weist dieses der Feldvariablen array zu. Beachte, dass die Dimension (3)<br />
e<strong>in</strong>er Feldvariablen nicht bei der Deklaration (<strong>in</strong>t[] array) angegeben wird,<br />
Algorithmen und Datenstrukturen II 5
sondern nur bei der Erzeugung (new <strong>in</strong>t[3]). Die erste Komponente e<strong>in</strong>es<br />
Feldes hat den Index 0. Die Länge des Feldes kann aus dessen Datenfeld<br />
length ausgelesen werden (array.length).<br />
Algorithmen und Datenstrukturen II 6
sondern nur bei der Erzeugung (new <strong>in</strong>t[3]). Die erste Komponente e<strong>in</strong>es<br />
Feldes hat den Index 0. Die Länge des Feldes kann aus dessen Datenfeld<br />
length ausgelesen werden (array.length).<br />
9. Die Zuweisung e<strong>in</strong>es Wertes an die i-te Komponente e<strong>in</strong>es Feldes, wobei<br />
0 ≤ i ≤ array.length−1:<br />
array[i] = expression;<br />
Algorithmen und Datenstrukturen II 6
class Echo {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t i = 0;<br />
while(i < args.length) {<br />
System.out.pr<strong>in</strong>tln(args[i]);<br />
i = i+1;<br />
}<br />
}<br />
}<br />
Algorithmen und Datenstrukturen II 7
class Echo {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t i = 0;<br />
while(i < args.length) {<br />
System.out.pr<strong>in</strong>tln(args[i]);<br />
i = i+1;<br />
}<br />
}<br />
}<br />
> java Echo 10 2<br />
10<br />
2<br />
><br />
Algorithmen und Datenstrukturen II 7
class BadAddOne {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t i = 0;<br />
while(i < args.length) {<br />
<strong>in</strong>t wert = args[i];<br />
wert = wert+1;<br />
System.out.pr<strong>in</strong>tln(wert);<br />
i = i+1;<br />
}<br />
}<br />
}<br />
Algorithmen und Datenstrukturen II 8
class BadAddOne {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t i = 0;<br />
while(i < args.length) {<br />
<strong>in</strong>t wert = args[i];<br />
wert = wert+1;<br />
System.out.pr<strong>in</strong>tln(wert);<br />
i = i+1;<br />
}<br />
}<br />
}<br />
Algorithmen und Datenstrukturen II 8
javac BadAddOne.java<br />
BadAddOne.java:6: Incompatible type for declaration.<br />
Can’t convert java.lang.Str<strong>in</strong>g to <strong>in</strong>t.<br />
<strong>in</strong>t wert = args[i];<br />
><br />
Algorithmen und Datenstrukturen II 9
class AddOne {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t i = 0;<br />
while(i < args.length) {<br />
<strong>in</strong>t wert = Integer.parseInt(args[i]);<br />
wert = wert+1;<br />
System.out.pr<strong>in</strong>tln(wert);<br />
i = i+1;<br />
}<br />
}<br />
}<br />
Algorithmen und Datenstrukturen II 10
class AddOne {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t i = 0;<br />
while(i < args.length) {<br />
<strong>in</strong>t wert = Integer.parseInt(args[i]);<br />
wert = wert+1;<br />
System.out.pr<strong>in</strong>tln(wert);<br />
i = i+1;<br />
}<br />
}<br />
}<br />
Algorithmen und Datenstrukturen II 10
java AddOne 6 3 20<br />
7<br />
4<br />
21<br />
><br />
Algorithmen und Datenstrukturen II 11
Von M<strong>in</strong>i-<strong>Java</strong> zu <strong>Java</strong><br />
Jedes M<strong>in</strong>i-<strong>Java</strong> Programm ist e<strong>in</strong> <strong>Java</strong> Programm. In diesem Abschnitt werden die<br />
Datentypen und imperativen Konstrukte von <strong>Java</strong> erläutert, die nicht bereits <strong>in</strong><br />
M<strong>in</strong>i-<strong>Java</strong> vorhanden s<strong>in</strong>d.<br />
Algorithmen und Datenstrukturen II 12
Elementare Datentypen<br />
Algorithmen und Datenstrukturen II 13
Elementare Datentypen<br />
Unicode: <strong>Java</strong>, als Sprache für das World Wide Web, benutzt e<strong>in</strong>en 16-Bit<br />
Zeichensatz, genannt Unicode. Die ersten 256 Zeichen von Unicode s<strong>in</strong>d<br />
identisch mit dem 8-Bit Zeichensatz Lat<strong>in</strong>-1, wobei wiederum die ersten 128<br />
Zeichen von Lat<strong>in</strong>-1 mit dem 7-Bit ASCII Zeichensatz übere<strong>in</strong>stimmen.<br />
Algorithmen und Datenstrukturen II 13
Elementare Datentypen<br />
Unicode: <strong>Java</strong>, als Sprache für das World Wide Web, benutzt e<strong>in</strong>en 16-Bit<br />
Zeichensatz, genannt Unicode. Die ersten 256 Zeichen von Unicode s<strong>in</strong>d<br />
identisch mit dem 8-Bit Zeichensatz Lat<strong>in</strong>-1, wobei wiederum die ersten 128<br />
Zeichen von Lat<strong>in</strong>-1 mit dem 7-Bit ASCII Zeichensatz übere<strong>in</strong>stimmen.<br />
Algorithmen und Datenstrukturen II 13
Elementare Datentypen und deren Literale:<br />
Algorithmen und Datenstrukturen II 14
Typ boolean true und false<br />
Typ <strong>in</strong>t 29 (Dezimalzahl) oder<br />
035 (Oktaldarstellung wegen führender 0) oder<br />
0x1D (Hexadezimaldarstellung wegen führendem 0x) oder<br />
0X1d (Hexadezimaldarstellung wegen führendem 0X)<br />
Typ long 29L (wegen angehängtem l oder L)<br />
Typ short short i = 29; (Zuweisung, es gibt ke<strong>in</strong> short-Literal)<br />
Typ byte byte i = 29; (Zuweisung, es gibt ke<strong>in</strong> byte-Literal)<br />
Typ double 18.0 oder 18. oder 1.8e1 oder .18E2<br />
Typ float 18.0f (wegen angehängtem f oder F)<br />
Typ char ’Q’, ’\u0022’, ’\u0b87’<br />
Typ Str<strong>in</strong>g "Hallo" (Str<strong>in</strong>g ist ke<strong>in</strong> elementarer Datentyp; s. <strong>Kapitel</strong> ??)<br />
Algorithmen und Datenstrukturen II 15
Typ boolean true und false<br />
Typ <strong>in</strong>t 29 (Dezimalzahl) oder<br />
035 (Oktaldarstellung wegen führender 0) oder<br />
0x1D (Hexadezimaldarstellung wegen führendem 0x) oder<br />
0X1d (Hexadezimaldarstellung wegen führendem 0X)<br />
Typ long 29L (wegen angehängtem l oder L)<br />
Typ short short i = 29; (Zuweisung, es gibt ke<strong>in</strong> short-Literal)<br />
Typ byte byte i = 29; (Zuweisung, es gibt ke<strong>in</strong> byte-Literal)<br />
Typ double 18.0 oder 18. oder 1.8e1 oder .18E2<br />
Typ float 18.0f (wegen angehängtem f oder F)<br />
Typ char ’Q’, ’\u0022’, ’\u0b87’<br />
Typ Str<strong>in</strong>g "Hallo" (Str<strong>in</strong>g ist ke<strong>in</strong> elementarer Datentyp; s. <strong>Kapitel</strong> ??)<br />
Algorithmen und Datenstrukturen II 15
Initialbelegungen: Während ihrer Deklaration kann e<strong>in</strong>e Variable wie <strong>in</strong> M<strong>in</strong>i-<strong>Java</strong><br />
<strong>in</strong>itialisiert werden.<br />
f<strong>in</strong>al double PI = 3.141592654;<br />
float radius = 1.0f;<br />
S<strong>in</strong>d für Datenfelder e<strong>in</strong>er Klasse ke<strong>in</strong>e Anfangswerte angegeben, so belegt<br />
<strong>Java</strong> sie mit vore<strong>in</strong>gestellten Anfangswerten. Der Anfangswert hängt vom Typ<br />
des Datenfeldes ab:<br />
Feld-Typ Anfangswert<br />
boolean false<br />
char ’\u0000’<br />
Ganzzahl (byte, short, <strong>in</strong>t, long) 0<br />
Gleitkommazahl +0.0f oder +0.0d<br />
andere Referenzen null<br />
Algorithmen und Datenstrukturen II 16
Lokale Variablen<br />
Lokale Variablen <strong>in</strong> e<strong>in</strong>er Methode (oder e<strong>in</strong>em Konstruktor oder e<strong>in</strong>em<br />
klassenbezogenen Initialisierungsblock) werden von <strong>Java</strong> nicht mit e<strong>in</strong>em<br />
Anfangswert <strong>in</strong>itialisiert. Vor ihrer ersten Benutzung muss e<strong>in</strong>er lokalen Variablen<br />
e<strong>in</strong> Wert zugewiesen werden (e<strong>in</strong> fehlender Anfangswert ist e<strong>in</strong> Fehler).<br />
Algorithmen und Datenstrukturen II 17
Kommentare<br />
// Kommentar bis zum Ende der Zeile<br />
/* Kommentar<br />
zwischen */<br />
Algorithmen und Datenstrukturen II 18
Kommentare<br />
// Kommentar bis zum Ende der Zeile<br />
/* Kommentar<br />
zwischen */<br />
Achtung: /* */ können nicht geschachtelt werden!<br />
/* falsch<br />
/* geschachtelter Kommentar */<br />
*/<br />
Algorithmen und Datenstrukturen II 18
&& logisches und<br />
| | logisches oder<br />
! logisches nicht<br />
Bool’sche Operatoren<br />
Algorithmen und Datenstrukturen II 19
&& logisches und<br />
| | logisches oder<br />
! logisches nicht<br />
Bool’sche Operatoren<br />
Die Auswertung e<strong>in</strong>es Bool’schen Ausdrucks erfolgt von l<strong>in</strong>ks nach rechts, bis der<br />
Wert e<strong>in</strong>deutig feststeht. Folgender Ausdruck ist deshalb robust:<br />
if(<strong>in</strong>dex>=0 && <strong>in</strong>dex
Bitoperatoren<br />
Die Bitoperatoren & (und) und | (oder) s<strong>in</strong>d def<strong>in</strong>iert durch:<br />
& 0 1<br />
0 0 0<br />
1 0 1<br />
| 0 1<br />
0 0 1<br />
1 1 1<br />
<strong>in</strong>t-Zahlen werden durch diese Operatoren bitweise behandelt.<br />
Algorithmen und Datenstrukturen II 20
Bitoperatoren<br />
Die Bitoperatoren & (und) und | (oder) s<strong>in</strong>d def<strong>in</strong>iert durch:<br />
& 0 1<br />
0 0 0<br />
1 0 1<br />
| 0 1<br />
0 0 1<br />
1 1 1<br />
<strong>in</strong>t-Zahlen werden durch diese Operatoren bitweise behandelt.<br />
Algorithmen und Datenstrukturen II 20
Beispiel 0.1 Es seien x und y folgendermaßen gewählt: x = 60 (<strong>in</strong><br />
B<strong>in</strong>ärdarstellung 00111100) und y = 15 (b<strong>in</strong>är: 00001111). In diesem Fall ist<br />
x&y = 12 und x|y = 63:<br />
x & y<br />
00111100 (60)<br />
& 00001111 (15)<br />
00001100 (12)<br />
x | y<br />
00111100 (60)<br />
| 00001111 (15)<br />
00111111 (63)<br />
Algorithmen und Datenstrukturen II 21
Inkrement und Dekrement<br />
Man kann den Wert e<strong>in</strong>er Variablen x (nicht den e<strong>in</strong>es Ausdrucks) durch den<br />
Operator ++ um 1 erhöhen bzw. durch - um 1 erniedrigen. Es gibt Präfix- und<br />
Postfixschreibweisen, die unterschiedliche Wirkungen haben: Bei der<br />
Präfixschreibweise wird der Wert zuerst modifiziert und danach der veränderte Wert<br />
zurückgeliefert. Bei der Postfixschreibweise wird zuerst der Wert der Variablen<br />
zurückgeliefert, dann wird sie modifiziert.<br />
Algorithmen und Datenstrukturen II 22
<strong>in</strong>t i = 10; <strong>in</strong>t i = 10;<br />
<strong>in</strong>t j = i++; <strong>in</strong>t j = ++i;<br />
System.out.pr<strong>in</strong>tln(j); System.out.pr<strong>in</strong>tln(j);<br />
> ><br />
10 11<br />
Der Ausdruck i++ ist gleichbedeutend mit i = i+1, jedoch wird i nur e<strong>in</strong>mal<br />
ausgewertet!<br />
Algorithmen und Datenstrukturen II 23
Beispiel 0.2<br />
(A) arr[where()]++;<br />
Die Methode where() wird e<strong>in</strong>mal aufgerufen.<br />
(B) arr[where()] = arr[where()]+1;<br />
Hierbei wird die Methode where() jedoch zweimal aufgerufen.<br />
Algorithmen und Datenstrukturen II 24
Seiteneffekte<br />
Seiteneffekte können hier sogar das Ergebnis bee<strong>in</strong>flussen: In dem Kontext arr[0]<br />
= 0; arr[1] = 1; arr[2] = 2; und<br />
private static <strong>in</strong>t zaehler = 0;<br />
private static <strong>in</strong>t where() {<br />
zaehler = zaehler+1;<br />
return zaehler;<br />
}<br />
liefert (A) arr[1] = 2 bzw. (B) arr[1] = 3.<br />
Algorithmen und Datenstrukturen II 25
Zuweisungsoperatoren<br />
i += 2; ist gleichbedeutend mit i = i+2; außer, dass der Ausdruck auf der l<strong>in</strong>ken<br />
Seite von i += 2; nur e<strong>in</strong>mal ausgewertet wird (vgl. Inkrement und Dekrement).<br />
Entsprechend s<strong>in</strong>d -=, &= und |= def<strong>in</strong>iert.<br />
Algorithmen und Datenstrukturen II 26
Die nichtabweisende Schleife<br />
Zusätzlich zur abweisenden Schleife gibt es e<strong>in</strong>e nichtabweisende Schleife <strong>in</strong> <strong>Java</strong>:<br />
do<br />
statement<br />
while(condition);<br />
Die condition wird erst nach der Ausführung von statement ausgewertet. Solange<br />
sie true ist, wird statement wiederholt.<br />
Algorithmen und Datenstrukturen II 27
for-Schleife<br />
for(<strong>in</strong>it-statement; condition; <strong>in</strong>crement-statement)<br />
statement<br />
Algorithmen und Datenstrukturen II 28
for-Schleife<br />
for(<strong>in</strong>it-statement; condition; <strong>in</strong>crement-statement)<br />
statement<br />
ist gleichbedeutend mit (mit Ausnahme vom Verhalten bei cont<strong>in</strong>ue):<br />
{<br />
}<br />
<strong>in</strong>it-statement<br />
while(condition) {<br />
statement<br />
<strong>in</strong>crement-statement<br />
}<br />
Algorithmen und Datenstrukturen II 28
Übliche Verwendung der for-Schleife:<br />
for(<strong>in</strong>t i=0; i
Übliche Verwendung der for-Schleife:<br />
for(<strong>in</strong>t i=0; i
Die Initialisierungs- bzw. Inkrementanweisung e<strong>in</strong>er for-Schleife kann e<strong>in</strong>e durch<br />
Kommata getrennte Liste von Ausdrücken se<strong>in</strong>. Diese werden von l<strong>in</strong>ks nach rechts<br />
ausgewertet.<br />
Beispiel 0.3 (Arnold & Gosl<strong>in</strong>g [?], S. 144)<br />
public static <strong>in</strong>t zehnerPotenz(<strong>in</strong>t wert) {<br />
<strong>in</strong>t exp, v;<br />
for(exp=0,v=wert; v>0; exp++, v=v/10)<br />
; // leere Anweisung<br />
return exp;<br />
}<br />
Algorithmen und Datenstrukturen II 30
Alle Ausdrücke dürfen auch leer se<strong>in</strong>; dies ergibt e<strong>in</strong>e Endlosschleife:<br />
for(;;) {<br />
System.out.pr<strong>in</strong>tln("Hallo");<br />
}<br />
Algorithmen und Datenstrukturen II 31
if(condition)<br />
statement1<br />
else<br />
statement2<br />
if-then-else Anweisung<br />
Algorithmen und Datenstrukturen II 32
If-else-Zuordnung<br />
public double positiveSumme(double[] werte) {<br />
double sum = 0.0;<br />
}<br />
if(werte.length > 1)<br />
for(<strong>in</strong>t i=0; i 0)<br />
sum += werte[i];<br />
else // hoppla!<br />
sum = werte[0];<br />
return sum;<br />
Algorithmen und Datenstrukturen II 33
public double positiveSumme(double[] werte) {<br />
double sum = 0.0;<br />
}<br />
if(werte.length > 1)<br />
for(<strong>in</strong>t i=0; i 0)<br />
sum += werte[i];<br />
else // hoppla!<br />
sum = werte[0];<br />
return sum;<br />
Algorithmen und Datenstrukturen II 34
public double positiveSumme(double[] werte) {<br />
double sum = 0.0;<br />
}<br />
if(werte.length > 1) {<br />
for(<strong>in</strong>t i=0; i 0)<br />
sum += werte[i];<br />
}<br />
else {<br />
sum = werte[0];<br />
}<br />
return sum;<br />
Algorithmen und Datenstrukturen II 35
Mehrdimensionale Felder<br />
Mehrdimensionale Felder werden <strong>in</strong> <strong>Java</strong> durch Felder von Feldern realisiert.<br />
Beispiel 0.4 (Jobst [?], S. 37)<br />
Algorithmen und Datenstrukturen II 36
public class Array2Dim {<br />
}<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t[][] feld = new <strong>in</strong>t[3][3];<br />
}<br />
//Weise feld[i][j] den Wert (i+1)*10+j zu<br />
for(<strong>in</strong>t i=0; i
java Array2Dim<br />
10 11 12<br />
20 21 22<br />
30 31 32<br />
Algorithmen und Datenstrukturen II 38
Beispiel 0.5 (Jobst [?], S. 38)<br />
Algorithmen und Datenstrukturen II 39
public class DemoArray {<br />
}<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t[][] feld = new <strong>in</strong>t[3][];<br />
}<br />
for(<strong>in</strong>t i=0; i
java DemoArray<br />
10<br />
20 21<br />
30 31 32<br />
Algorithmen und Datenstrukturen II 41
Felder können bei ihrer Deklaration sofort <strong>in</strong>itialisiert werden:<br />
Algorithmen und Datenstrukturen II 42
Beispiel 0.6 (Jobst [?] S. 39)<br />
public class DemoFeldInitial {<br />
}<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
<strong>in</strong>t[][] feld = {{1,2,3},{4,5},{7,8,9,10}};<br />
}<br />
//Ausgabe des Feldes<br />
for(<strong>in</strong>t i=0; i
switch(expression) {<br />
case const1: statement1 break;<br />
case const2: statement2 break;<br />
...<br />
default: statement<br />
}<br />
switch-Anweisung<br />
Algorithmen und Datenstrukturen II 44
Beispiel 0.7 (Jobst [?], S. 15)<br />
Algorithmen und Datenstrukturen II 45
public class DemoFuerSwitch {<br />
public static void ma<strong>in</strong> (Str<strong>in</strong>g[] args) {<br />
for(<strong>in</strong>t i=0; i
}<br />
Algorithmen und Datenstrukturen II 47
Algorithmen und Datenstrukturen II 48
java DemoFuerSwitch<br />
0 sonst<br />
1 Fall 1,2<br />
1 Fall 3<br />
1 Fall 7<br />
2 Fall 1,2<br />
2 Fall 3<br />
2 Fall 7<br />
3 Fall 3<br />
3 Fall 7<br />
4 sonst<br />
5 sonst<br />
6 sonst<br />
7 Fall 7<br />
8 sonst<br />
9 sonst<br />
Algorithmen und Datenstrukturen II 49
10 sonst<br />
><br />
Algorithmen und Datenstrukturen II 50