Anweisung

Werbung
3. Kontrollstrukturen
Anweisungen und Blöcke
3. Anweisungen und Kontrollstrukturen
• Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen,
• z.B. ob oder in welcher Reihenfolge Anweisungen unseres Programms ausgeführt
werden.
• Kontrollstrukturen entsprechen algorithmischen Elementen:
– Selektion,
– Mehrfachselektion,
– Zählschleifen,
– kopf- bzw. fußgesteuerte Schleife
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
61
3. Kontrollstrukturen
Anweisungen und Blöcke
Anweisungen
Einige einfache Anweisungen kennen wir bereits:
• die Deklarationsanweisung zur Vereinbarung von Variablen,
• die Zuweisung und
• den Methodenaufruf.
Zuweisungen und Methodenaufrufe sind Ausdrucksanweisungen, d.h. es handelt sich
um Ausdrücke, die durch Anhängen eines Semikolons zu Anweisungen werden.
Die leere Anweisung besteht aus einem einzelnen Semikolon:
;
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
62
3. Kontrollstrukturen
Anweisungen und Blöcke
Blöcke
• Ein Block ist eine Folge von Anweisungen, die durch { und } geklammert sind.
• Solch ein Block stellt eine Anweisung dar, nämlich eine zusammengesetzte Anweisung.
• Variablen sind stets nur bis zum Ende des Blockes, in dem sie deklariert wurden,
gültig. Wir sprechen in diesem Zusammenhang auch vom Gültigkeitsbereich der
Variablen.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
63
3. Kontrollstrukturen
Anweisungen und Blöcke
{
int x = 5;
x++;
{
long y;
y = x + 123456789;
System.out.println(y);
}
System.out.println(x);
{
double d;
d = x + 1.5;
System.out.println(d);
}
• ein äußerer mit zwei inneren Blöcken
• Die Variable x des äußeren Blocks ist
in den inneren gültig.
• Auf die Variablen y könnte im äußeren
und im zweiten inneren Block nicht zugegriffen werden.
• Mehrfachverwendung von Variablennamen in unterschiedlichen Blöcken
ist möglich.
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
64
3. Kontrollstrukturen
Selektionsanweisungen
if-Anweisung
Syntax:
if ( boolscher Ausdruck )
Anweisung1
else
Anweisung2
• Zunächst wird der Ausdruck zwischen ( und ) ausgewertet. Dieser Ausdruck muß
vom Ergebnistyp boolean sein.
• Liefert der Ausdruck true, wird Anweisung1 ausgeführt, bei false die Anweisung2.
• Der else-Teil ist optional. Fehlt der else-Teil, wird bei false keine Anweisung ausgeführt.
• Zur Erinnerung: Statt einer Anweisung kann auch ein Block (von Anweisungen)
verwendet werden.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
65
3. Kontrollstrukturen
Selektionsanweisungen
Zu welchem if gehört das else?
Syntaktisch wären zwei Interpretationen
möglich.
if ( boolscher Ausdruck1 )
if ( boolscher Ausdruck2 )
Anweisung1
else
Anweisung2
Ein else gehört stets zum innersten if!
if ( boolscher Ausdruck1 )
if ( boolscher Ausdruck2 )
Anweisung1
else
Anweisung2
Und wenn wir eine Zuordnung zum äußeren if benötigen?
☞ Verwendung eines Blocks mit { und }.
if ( boolscher Ausdruck1 ) {
if ( boolscher Ausdruck2 )
Anweisung1
}
else
Anweisung2
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
66
3. Kontrollstrukturen
Selektionsanweisungen
switch-Anweisung
switch (ganzzahliger Ausdruck) { • Die switch-Anweisung entspricht einer Mehrfachselektion.
case Konstante1: Anweisung
• Der ganzzahlige Ausdruck muß vom
...
Typ byte, short, int oder char
Anweisung
sein.
break;
...
• Die hinter case angegebenen Koncase KonstanteN : Anweisung
stanten legen Einsprungmarken für
...
den Programmablauf fest.
Anweisung
• Der Programmablauf wird bei genau
break;
der case-Marke fortgesetzt, die als
default: Anweisung
Konstante dem Ergebnis des Aus...
drucks entspricht.
Anweisung
• Ab der Markierung werden die Anbreak;
weisungen bis zur nächsten break}
Marke ausgeführt.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
67
3. Kontrollstrukturen
Selektionsanweisungen
• Wird das Ergebnis des Ausdrucks in keiner case-Konstante gefunden, so wird die
Programmausführung bei der default-Marke fortgesetzt.
• default ist optional! Trifft keine case-Konstante zu und ist kein default vorhanden, so wird die Programmausführung mit der ersten Anweisung hinter der
switch-Anweisung fortgesetzt.
• Häufiger Fehler bei der Verwendung von switch: Das Vergessen der breakAnweisungen.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
68
3. Kontrollstrukturen
Schleifen
for-Anweisung
Syntax:
for ( Initialisierung ; boolscher Ausdruck ; Update )
Anweisung
• Wird üblicherweise als Zählschleife eingesetzt.
• Der Teil Initialisierung im Schleifenkopf dient der Deklaration und Initialisierung einer (oder mehrerer) Zählvariablen.
• Die Anweisung im Rumpf der Schleife wird ausgeführt, solange der boolsche Ausdruck den Wert true liefert.
• Update dient zur Aktualisierung der Zählvariablen für die folgende Iteration.
Beispiel: zeilenweise Ausgabe der Zahlen 0 bis 9:
for (int i=0 ; i<10 ; i++ )
System.out.println(i);
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
69
3. Kontrollstrukturen
Schleifen
• Wollen wir mehr als eine Anweisung im Inneren der Schleife ausführen, nehmen
wir einen Block.
• Alle drei Bestandteile des Schleifenkopfs sind optional. Dementsprechend ist auch
for (;;)
Anweisung
syntaktisch korrekt. Dies entspricht einer Endlosschleife.
• Worin besteht der Unterschied zwischen den folgenden Konstruktionen?
for (int i=0 ; i<10 ; i++ )
Anweisung
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
int i;
for ( i=0 ; i<10 ; i++ )
Anweisung
70
3. Kontrollstrukturen
Schleifen
while-Anweisung
Syntax:
while ( boolscher Ausdruck )
Anweisung
• Kopfgesteuerte Schleife:
– Bei jeder Iteration wird zunächst der boolsche Ausdruck ausgewertet.
– Wenn dieser true liefert, wird die Anweisung (Schleifenrumpf) ausgeführt.
• Die while-Schleife wird üblicherweise dann eingesetzt, wenn
– der Schleifenrumpf u.U. gar nicht durchlaufen werden soll
– und die Anzahl der Iterationen im voraus nicht bekannt ist.
Beispiele:
int i = 0;
while ( i<10 ) {
System.out.println(i);
i++;
}
int c;
c = System.in.read();
while ( c != -1 ) {
verarbeite Eingabezeichen c
c = System.in.read();
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
71
3. Kontrollstrukturen
Schleifen
do-Anweisung
do
Syntax:
Anweisung
while (boolscher Ausdruck);
• Fußgesteuerte Schleife:
– Bei jeder Iteration wird zunächst die Anweisung ausgeführt.
– Anschließend wird der boolsche Ausdruck ausgewertet. Liefert dieser true, wird
zur nächsten Iteration übergegangen, ansonsten endet die Abarbeitung der doSchleife.
• Die do-Schleife wird üblicherweise dann eingesetzt, wenn
– der Schleifenrumpf mindestens einmal durchlaufen werden soll
– und die Anzahl der Iterationen im voraus nicht bekannt ist.
• Auch hier muß ein Block verwendet werden, wenn der Schleifenrumpf aus mehr
als einer Anweisung besteht.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
72
3. Kontrollstrukturen
Schleifen
Beispiele:
• Ausgabe von 0 bis 9:
int i = 0;
do {
System.out.println(i);
i++;
} while ( i<10 );
• Verarbeitung von Zeichen der Standardeingabe:
int c;
do {
c = System.in.read();
if ( c!= -1 )
verarbeite Eingabezeichen c
} while ( c != -1 );
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
73
3. Kontrollstrukturen
Schleifen
Sprungbefehle
• Mit der Anweisung continue wird der aktuelle Schleifendurchlauf beendet und es
wird direkt zur nächsten Iteration übergegangen.
• Die Anweisung continue wird beispielsweise zur Behandlung von Ausnahmefällen bei Zählschleifen verwendet.
for (int i=-10; i<=10 ; i++ ) {
if ( i==0 )
continue;
System.out.println( "Division von 1 durch " + i +
" ergibt " + 1/i);
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
74
3. Kontrollstrukturen
Schleifen
• Die Anweisung break dient dazu, die Abarbeitung einer Schleife oder eines
Blockes vorzeitig zu beenden.
• Man verlässt damit die Schleife bzw. den Block, der aktuell ausgeführt wird.
• Die Programmausführung wird fortgesetzt mit der nächsten Anweisung, die der
Schleife bzw. dem Block folgt.
• Beispiel: Suche eines Elementes in einem Feld. Wenn das Element gefunden wird,
kann die Suche abgebrochen werden.
int x;
int feld;
...
for ( int i=0 ; i<feld.length ; i++ )
if ( x == feld[i] )
{
System.out.println( "Element " + x + " gefunden!" );
break;
}
• Sprungbefehl return zum Verlassen von Methoden: hierzu später mehr
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
75
3. Kontrollstrukturen
Beispiele
Beispiele
• Gegeben ist der folgende Ausschnitt aus einem Programm:
int i = 20;
while ( i>0 ) {
System.out.println(i);
i -= 2;
}
– Was bewirkt diese Schleife?
– Wie lautet eine for-Schleife mit gleicher Ausgabe?
• Was bewirken die folgenden Zeilen?
while (true) {
System.out.println("Aloha");
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
76
3. Kontrollstrukturen
Beispiele
• Bestimmen Sie die Ausgabe des folgenden Java-Programms:
public class BreakAndContinue {
public static void main(String args[] ) {
for (int i=0 ; i<100 ; i++ ) {
if ( i==74 ) break;
if (i % 9 != 0 ) continue;
System.out.println(i);
}
int i = 0;
while (true) {
// Endlos-Schleife ?
i++;
int j = i * 30;
if (j==1260) break;
if (i % 10 != 0 ) continue;
System.out.println(i);
}
}
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
77
3. Kontrollstrukturen
Beispiele
• Sie wollen ein Schachbrett numerieren in der folgenden Form:
1
2
3
4
5
6
7
8
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 10
8 9 10 11
9 10 11 12
6
7
8
9
10
11
12
13
7
8
9
10
11
12
13
14
8
9
10
11
12
13
14
15
Formulieren Sie eine geschachtelte for-Schleife, die eine entsprechende Ausgabe erzeugt.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 07
78
Herunterladen