11.03.2014 Aufrufe

JAVA - Kontrollstrukturen

JAVA - Kontrollstrukturen

JAVA - Kontrollstrukturen

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.

Ü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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!