JAVA - Kontrollstrukturen
JAVA - Kontrollstrukturen
JAVA - Kontrollstrukturen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Übungen Informatik I<br />
<strong>JAVA</strong><br />
- <strong>Kontrollstrukturen</strong><br />
http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/Tutorial<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 1
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
In Java gibt es folgende Gruppen von <strong>Kontrollstrukturen</strong>:<br />
1. Verzweigungen<br />
• Einfachverzweigung if, if-else<br />
• Mehrfachverzweigung switch/case<br />
• Auswahloperator ?<br />
2. Schleifen mit<br />
• while „abweisende Schleife“<br />
• do-Schleife „nichtabweisende Schleife“<br />
• for-Schleife „Zählschleife“<br />
3. Unbedingte Sprünge mit continue, break<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 2
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ if / if-else – Anweisung“<br />
Syntax:<br />
if (Boole'scher Ausdruck ) anweisung ;<br />
// Wenn Ausdruck wahr ist, führe die Anweisung aus.<br />
if (Boole'scher Ausdruck ){ // Wenn Ausdruck wahr ist,<br />
anweisung1;<br />
// führe anweisung1 aus<br />
} else { // Wenn Ausdruck falsch ist,<br />
anweisung2;<br />
// führe anweisung2 aus<br />
}<br />
Bei mehr als einer Anweisung müssen diese mit { } als ein Block<br />
geklammert werden.<br />
Verschachtelte if-else-Anweisungen (Klammern wegen Mehrdeutigkeit)<br />
if (bedingung1) {<br />
if (bedingung2){<br />
anweisung1;<br />
} else {<br />
anweisung2;<br />
}<br />
}<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 3
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong> Auswahloperator ?<br />
int x=2, y=3, z=4;<br />
if ( x == 2 && y
<strong>JAVA</strong><br />
Code-Konvention<br />
„<strong>Kontrollstrukturen</strong>“<br />
Einfache Anweisungen<br />
Nur eine Anweisung pro Zeile.<br />
argv++;<br />
argc--;<br />
argv++; argc--; // Nein!<br />
Bedingungen<br />
if (condition) {<br />
statements;<br />
}<br />
if (condition) {<br />
statements;<br />
} else {<br />
statements;<br />
}<br />
if (condition) {<br />
statements;<br />
} else if (condition) {<br />
statements;<br />
} else if (condition) {<br />
statements;<br />
}<br />
// Vermeiden (Klammern !!)<br />
if (condition)<br />
statement;<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 5
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong> „ switch – Anweisung“ (Mehrfachverzweigung)<br />
Syntax:<br />
switch (Ausdruck ) {<br />
}<br />
case konstante1: anweisung1;<br />
...<br />
case konstanteN: anweisungN;<br />
default: anweisung;<br />
// Wert des Ausdruck bestimmt<br />
// das Einsprungziel<br />
Die switch-Anweisung kann die Folge von if-else-Anweisungen ersetzen<br />
Ausdruck:<br />
- muss vom Typ byte, short, char oder int sein.<br />
- steuert die switch-Anweisung<br />
case:<br />
Einsprungziel<br />
default:<br />
wenn der Wert des Ausdrucks mit keinem case-Fall übereinstimmt<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 6
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong> „ switch – Anweisung“ (Mehrfachverzweigung)<br />
Beispiel1:<br />
int a = 1;<br />
System.out.println (a);<br />
switch (a) {<br />
case 0 : System.out.println ("Null");<br />
case 1 : System.out.println ("Eins");<br />
case 2 : System.out.println ("Zwei");<br />
case 3 : System.out.println ("default");<br />
}<br />
Ausgabe des Programms für a = 1: 1<br />
Eins<br />
Zwei<br />
default<br />
break-Anweisung<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 7
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong> „ switch – Anweisung“ (Mehrfachverzweigung)<br />
Beispiel2:<br />
int a = 1;<br />
System.out.println (a);<br />
switch (a) {<br />
case 0 : System.out.println ("Null");<br />
break;<br />
case 1 : System.out.println ("Eins");<br />
break;<br />
case 2 : System.out.println ("Zwei");<br />
break;<br />
case 3 : System.out.println ("default");<br />
break;<br />
}<br />
Ausgabe des Programms für a = 1: 1<br />
Eins<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 8
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong> „ switch – Anweisung“ (Mehrfachverzweigung)<br />
Beispiel 3:<br />
„ist das Zeichen b ein Sonderzeichen oder Buchstabe?“:<br />
char b = ‘:‘;<br />
switch(b) {<br />
case '0': case '1': case '2': case '3':<br />
case '4': case '5': case '6': case '7':<br />
case '8': case '9':<br />
System.out.println("Ziffer!");<br />
break;<br />
case '.': case ',': case ';':<br />
case '?': case '!': case ':':<br />
System.out.println("Satzzeichen!");<br />
break;<br />
default:<br />
System.out.println("Buchstabe/Sonderzeichen!");<br />
}<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 9
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ while – Schleife“<br />
• Syntax:<br />
while( Boole'scher Ausdruck ){ // Solange der Ausdruck wahr ist,<br />
anweisung;<br />
// führe die Anweisung aus.<br />
}<br />
• Beispiel ohne Block:<br />
int counter = 0;<br />
while( counter < 99 )<br />
System.out.println( counter++ );<br />
• Beispiel ohne Rumpf:<br />
while( calculate( value ) < 99 );<br />
• Beispiel mit Block:<br />
Bei mehr als einer Anweisung müssen die Anweisungen mit { } als ein Block<br />
geklammert werden.<br />
int count = 0;<br />
while( count < 99 ) {<br />
++count;<br />
System.out.println( calculate( count ));<br />
}<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 10
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ while – Schleife“<br />
• Achtung (Position des Semikolons):<br />
while( count < 10 ); // Semikolon zu viel !<br />
{<br />
++count;<br />
// Ist zwar eingerückt, gehört<br />
} // aber nicht zur Schleife!<br />
Tipp: Setzen Sie immer den Block in Klammern {}. Dieses erhöht die<br />
Lesbarkeit und verringert die Fehlerwahrscheinlichkeit.<br />
• Erst Bedingung testen, dann Anweisung durchführen:<br />
Bei einer while-Schleife wird erst die Bedingung geprüft und<br />
wenn sie wahr ist wird die Anweisung /Anweisungsblock<br />
ausgeführt.<br />
→ eine while-Schleife braucht nicht unbedingt durchlaufen werden.<br />
Beispiel:<br />
int j=0;<br />
while (j
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ do – Schleife“<br />
• Syntax:<br />
do {<br />
anweisung;<br />
}<br />
while( Boole'sche Laufbedingung );<br />
//abhängige Anweisung<br />
• Unterschied zur while-Schleife:<br />
Erst Anweisung durchführen, dann Bedingung testen.<br />
→ die Schleife wird mindestens 1x durchlaufen<br />
→ nichtabweisende Schleife<br />
• Beachte: Position des Semikolons → hinter while!<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 12
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ do – Schleife“<br />
• Beispiel 1:<br />
int counter = 0;<br />
do {<br />
calculate( ++counter );<br />
}<br />
while( counter < 99 );<br />
oder kurz:<br />
int counter = 0;<br />
do ; while( calculate( ++counter ) < 99 );<br />
• Beispiel 2:<br />
int i=0;<br />
do {<br />
System.out.print(i++ + " ");<br />
} while ( i
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ do – Schleife“<br />
Beispiel 3:<br />
public class BeispielDoWhile {<br />
public static void main (String[] args) {<br />
int i = 0;<br />
do {<br />
System.out.println(“do while i
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong> „Inkrement/Dekrement – Operator“<br />
Inkrement- und Dekrement-Operatoren gibt es als<br />
- Postfix-Operator (i++ / i--)<br />
Operation wird angewandt, nachdem der Wert des Ausdruck<br />
zurückgegeben wird<br />
- Präfix –Operator (++i / --i)<br />
Operation wird angewandt, bevor der Wert des Ausdruck<br />
zurückgegeben wird<br />
Beispiel:<br />
public class InkDekOp {<br />
public static void main(String[] args) {<br />
int i = 4711;<br />
}<br />
}<br />
System.out.println (i++ + " " + ++i + " " + i );<br />
System.out.println (i-- + " " + --i + " " + i );<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 15
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ For – Schleife“<br />
• Syntax:<br />
for( Initialisierungen; Grenzbedingung; Zählen ) {<br />
abhaengige_anweisung<br />
}<br />
• Beispiel:<br />
Initialisierung Grenzbedingung Zählen<br />
• Initialisierung<br />
for( int i = 0; i < max; i++ ) {<br />
System.out.println( i );<br />
}<br />
• initialisieren des Schleifenzählers, die Zählvariable muss ganzzahlig sein<br />
• wird beim Eintritt in die Schleife einmal ausgeführt.<br />
• darf aus mehreren Ausdrücken bestehen, die durch Komma getrennt sind.<br />
• Grenzbedingung:<br />
• wird vor jedem Durchlaufen der for-Schleife getestet<br />
• wenn wahr anweisungen ausführen schrittweite berechnen<br />
• wenn falsch weiter nach der geschweiften Klammer der for-Schleife<br />
• for-Schleife wird sooft durchlaufen, wie die Grenzbedingung true ist<br />
• Zählen<br />
• dieser Ausdruck wird nach jedem Durchlaufen der Schleife ausgeführt<br />
( Schleifenvariablen aktualisieren)<br />
• darf aus mehreren Ausdrücken bestehen, die durch Komma getrennt sind.<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 16
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ For – Schleife“<br />
• Beispiel (Übergang von while- zu for-Schleife):<br />
int count = 0;<br />
// Initialisierung<br />
while( count < 10 ) {<br />
// Laufbedingung<br />
System.out.println( “ No:" + count );<br />
count++; // Weiterzaehlen<br />
}<br />
Als for-Schleife:<br />
for( int count = 0; count < 10; count++ ) {<br />
System.out.print( “ No:" + count );<br />
}<br />
• Beispiele:<br />
public static void main (String[] args) {<br />
}<br />
int i;<br />
System.out.println ();<br />
for (i=1; i
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„ For – Schleife“<br />
Weitere Beispiele:<br />
for( int count = 0; count < 10; System.out.print( count++ ));<br />
Jeder der drei Teile kann weggelassen werden!<br />
for( ; count < 10; System.out.print( count++ )); // äqivalent zu<br />
// while(laufbedingung)<br />
for( ; ; System.out.print( count++) );<br />
// äquivalent zu while(true)<br />
• Mehr als drei Schleifen sollten nicht geschachtelt werden. ( Methoden einbauen.)<br />
• übliche Bezeichner für Schleifenvariablen: i,j,k vom Typ int.<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 18
<strong>JAVA</strong><br />
Code-Konvention<br />
<strong>Kontrollstrukturen</strong><br />
for (init; condition; updt) {<br />
statements;<br />
}<br />
do {<br />
statements;<br />
} while (condition);<br />
while (condition) {<br />
statements;<br />
}<br />
„<strong>Kontrollstrukturen</strong>“<br />
switch (condition) {<br />
case ABC:<br />
statements;<br />
/* falls through */<br />
case DEF:<br />
statements;<br />
break;<br />
case XYZ:<br />
statements;<br />
break;<br />
while (condition)<br />
statements;<br />
}<br />
default:<br />
statements;<br />
break;<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 19
<strong>JAVA</strong><br />
Code-Konvention<br />
public void run (int[] values) {<br />
int hold;<br />
}<br />
for( int pass = 1; pass < values.length; pass++ ) {<br />
for( int i = 0 ; i < values.length - 1; i++ ) {<br />
if( values[ i ] > values[ i + 1 ] ) {<br />
hold = values[ i ];<br />
values[ i ] = values[ i + 1 ];<br />
values[ i + 1 ] = hold;<br />
}<br />
}<br />
}<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 20
<strong>JAVA</strong><br />
Code-Konvention<br />
Verteilung von Leerzeichen<br />
Leerzeichen sollten in den folgenden Situationen verwendet werden:<br />
• Ein Schlüsselwort, gefolgt von einer Klammer, Beispiel:<br />
while (true)<br />
• Nach einem Komma in einer Argumentenliste.<br />
f (int a, int b)<br />
• Vor und nach einem binären Operator außer ., Beispiel:<br />
int i = a + b;<br />
• Zum Trennen von Ausdrücke in einer for-Schleife, Beispiel:<br />
for (int i = 0; i < 10; i++)<br />
• Nach einem cast-Operator, Beispiel:<br />
int i = (int) x;<br />
Leerzeichen sollten nicht verwendet werden:<br />
• Zum Trennen von unären Operatoren von ihren Argumenten,<br />
Beispiel:<br />
int i = j++;<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 21
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„break und continue“<br />
„Unbedingte Sprünge break, continue“<br />
• Bieten zwei Möglichkeiten, normale Auswertungsreihenfolgen<br />
einer Schleife zu verändern<br />
• Gibt es jeweils mit und ohne Marken (Label)<br />
break-Anweisung innerhalb einer Schleife:<br />
Schleife wird verlassen und das Programm mit der ersten Anweisung<br />
nach der Schleife fortgesetzt.<br />
continue-Anweisung innerhalb einer Schleife:<br />
das Programm springt an das Ende des Schleifenrumpfs<br />
und beginnt mit der nächsten Iteration<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 22
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„unlabeled break“<br />
unlabeled break:<br />
break-Anweisung ohne Marken<br />
- beendet aktuelle Schleife<br />
- setzt Programmausführung hinter der Schleife fort<br />
(man kann grundsätzlich die innerste for-,while-,do- oder<br />
switch-Anweisung verlassen)<br />
public class Break01 {<br />
public static void main(String[] args) {<br />
for(int i = 1; i < 1000000; i++) {<br />
System.out.println(i);<br />
if (i > 5)<br />
break;<br />
}<br />
}<br />
}<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 23
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„unlabled continue“<br />
continue-Anweisung:<br />
• beendet aktuelle Schleife nicht,<br />
• springt an das Ende der umgebenden Schleife.<br />
• Schleifenbedingung wird überprüft, und<br />
die Schleife läuft evtl. weiter.<br />
int zahl = 12;<br />
while (zahl > 0) {<br />
zahl--;<br />
if( zahl % 3 == 0) continue;<br />
System.out.println("zahl = " + zahl);<br />
}<br />
( druckt nur, wenn nicht durch 3 teilbar.)<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 24
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„labeled break“<br />
break Label;<br />
- mit einem unlabeled break kann man nur die innerste Schleife verlassen<br />
- mit einem labeled break (label = Marke) kann man zwei oder mehr<br />
ineinandergeschachtelte Schleifen beenden.<br />
- Ein Label besteht aus Bezeichner + Doppelpunkt (TestSchleife:)<br />
TestSchleife:<br />
// Label = Name für die folgende Schleife<br />
for(int i = 1; i < 1000000; i++) {<br />
for(int j = 1; j < 1000000; j++) {<br />
System.out.println(i + j);<br />
if (j > 5)<br />
break TestSchleife; // springt hinter die Schleife „TestSchleife“<br />
}<br />
} // Ende for i = Ende TestSchleife<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 25
<strong>JAVA</strong><br />
<strong>Kontrollstrukturen</strong><br />
„labeled break“<br />
TestSchleife:<br />
for (int i = 1; i < 3; i++) {<br />
// Name für äußere Schleife<br />
NochEinLabel:<br />
// Name für innere Schleife<br />
for (int j = 1; j < 10; j++) {<br />
System.out.println(i + j);<br />
if (j > 2) {<br />
break NochEinLabel; // Ende der inneren Schleife<br />
} // Das Programm wird nach<br />
// dieser Zeile fortgesetzt.<br />
System.out.println(“i=“ + i + “ j=“ + j);<br />
}<br />
Helga Gabler, Holger Vogelsang, Christian Pape<br />
Übungen Informatik 1 Folie 26