24.11.2012 Aufrufe

Kapitel 3: Imperative Programmierung in Java

Kapitel 3: Imperative Programmierung in Java

Kapitel 3: Imperative Programmierung in Java

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!