Syntax und Semantik Java: Der Einstieg Imperative Programmierung in Java Algorithmen zur exakten Suche in Texten Objektori Algorithmen und Datenstrukturen II Alexander Sczyrba AG Praktische Informatik Technische Fakultät Universität Bielefeld Vorlesung Sommer 2008 Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Teil III Imperative Programmierung in Java Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Mini-Java Ein Mini-Java Programm besteht aus genau einer Klasse. In dieser Klasse gibt es genau eine main-Methode. Folgende Konstrukte sind Anweisungen (statements gemäß Mini-Java-Syntax) Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Mini-Java Ein Mini-Java Programm besteht aus genau einer Klasse. In dieser Klasse gibt es genau eine main-Methode. Folgende Konstrukte sind Anweisungen (statements gemäß Mini-Java-Syntax) Die Deklaration einer Variablen vom Typ int mit sofortiger Initialisierung: Beispiel int ident = expression; Jeder Bezeichner (ident) darf in höchstens einer Variablendeklaration vorkommen. Diese kontextsensitive Bedingung lässt sich nicht in der EBNF-Definition formulieren. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Zuweisung Die Zuweisung eines Wertes an eine Variable: Beispiel ident = expression; Diese Variable muss vorher deklariert worden sein und den gleichen Typ wie der Ausdruck haben. Diese Nebenbedingung ist ebenfalls nicht in der EBNF-Definition ausgedrückt. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java if-then Anweisung Eine bedingte Anweisung (if-then Anweisung): Beispiel if(condition) statement Der Bool’sche Ausdruck (condition) wird ausgewertet; ist er true, so wird die Anweisung (statement) ausgeführt. Ist er false, so wird die Anweisung nicht ausgeführt und die Programmausführung mit der nächsten Anweisung hinter der if-then Anweisung fortgesetzt. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java while-Schleife Eine abweisende Schleife (while-Schleife): Beispiel while(condition) statement Der Bool’sche Ausdruck wird ausgewertet; ist er true, so wird die Anweisung so lange ausgeführt, bis der Bool’sche Ausdruck false wird. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Block Ein Block. Beispiel { statement1 ; statement2 ; . . . } Die Statements in der geschweiften Klammer werden von links nach rechts nacheinander abgearbeitet. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Ausgabe Eine Anweisung zum Schreiben auf der Standardausgabe: Beispiel System.out.println(...); System ist eine Klasse, die klassenbezogene Methoden zur Darstellung des Zustandes des Systems bereitstellt. out ist eine Klassenvariable der Klasse System, ihr Inhalt ist der Standardausgabestrom. Die Methode println wird also auf das klassenbezogene Datenfeld out angewendet – es wird ein String mit abschließendem Zeilenvorschub auf dem Standardausgabestrom ausgegeben. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java leere Anweisung Die leere Anweisung. Beispiel ; Es geschieht nichts. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Arrays Die Deklaration eines eindimensionalen Feldes (Arrays) mit sofortiger Initialisierung: Beispiel int[] array = new int[3]; deklariert ein Feld namens array, erzeugt ein Feld mit drei int-Komponenten und weist dieses der Feldvariablen array zu. Beachte, dass die Dimension (3) einer Feldvariablen nicht bei der Deklaration (int[] array ) angegeben wird, sondern nur bei der Erzeugung (new int[3]). Die erste Komponente eines Feldes hat den Index 0. Die Länge des Feldes kann aus dessen Datenfeld length ausgelesen werden (array .length). Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Array: Zuweisung Die Zuweisung eines Wertes an die i-te Komponente eines Feldes, wobei 0 ≤ i ≤ array .length−1: Beispiel array [i] = expression; Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Programmargumente Alle weiteren Konstrukte haben eine offensichtliche Bedeutung, bis auf Integer.parseInt(argsIdent[expression]) Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Programmargumente Betrachten wir hierfür noch einmal die main-Methode: Sie hat als Parameter ein Feld von Zeichenketten. Diese Zeichenketten sind die Programmargumente und werden normalerweise vom Anwender beim Programmaufruf eingegeben. Beispiel class Echo { public static void main(String[] args) { int i = 0; while(i < args.length) { System.out.println(args[i]); i = i+1; } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Programmargumente Betrachten wir hierfür noch einmal die main-Methode: Sie hat als Parameter ein Feld von Zeichenketten. Diese Zeichenketten sind die Programmargumente und werden normalerweise vom Anwender beim Programmaufruf eingegeben. Beispiel class Echo { public static void main(String[] args) { int i = 0; while(i < args.length) { System.out.println(args[i]); i = i+1; } } } Alexander Sczyrba A&D II, Vorlesung 2008 > java Echo 10 2 10 2 Universität Bielefeld Von Mini-Java zu Java Typkonvertierung Um eine Zeichenkette in eine ganze Zahl zu konvertieren, wird die Klassenmethode parseInt der Klasse Integer mit dieser Zeichenkette als Argument aufgerufen. Sie liefert die entsprechende ganze Zahl als Ergebnis zurück bzw. meldet einen Fehler, falls die Zeichenkette keine ganze Zahl dargestellt hat. Beispiel class BadAddOne { public static void main(String[] args) { int i = 0; while(i < args.length) { int wert = args[i]; wert = wert+1; System.out.println(wert); i = i+1; } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Typkonvertierung Um eine Zeichenkette in eine ganze Zahl zu konvertieren, wird die Klassenmethode parseInt der Klasse Integer mit dieser Zeichenkette als Argument aufgerufen. Sie liefert die entsprechende ganze Zahl als Ergebnis zurück bzw. meldet einen Fehler, falls die Zeichenkette keine ganze Zahl dargestellt hat. Beispiel class BadAddOne { public static void main(String[] args) { int i = 0; while(i < args.length) { int wert = args[i]; wert = wert+1; System.out.println(wert); i = i+1; } } } Alexander Sczyrba A&D II, Vorlesung 2008 > javac BadAddOne.java BadAddOne.java:6: Incompatible type for declaration. Can’t convert java.lang.String to int. int wert = args[i]; Universität Bielefeld Von Mini-Java zu Java Typkonvertierung Stattdessen muss eine explizite Typkonvertierung stattfinden: Beispiel class AddOne { public static void main(String[] args) { int i = 0; while(i < args.length) { int wert = Integer.parseInt(args[i]); wert = wert+1; System.out.println(wert); i = i+1; } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Typkonvertierung Stattdessen muss eine explizite Typkonvertierung stattfinden: Beispiel class AddOne { public static void main(String[] args) { int i = 0; while(i < args.length) { int wert = Integer.parseInt(args[i]); wert = wert+1; System.out.println(wert); i = i+1; } } } Alexander Sczyrba A&D II, Vorlesung 2008 > java AddOne 6 3 20 7 4 21 Universität Bielefeld Von Mini-Java zu Java Von Mini-Java zu Java Jedes Mini-Java Programm ist ein Java Programm. In diesem Abschnitt werden die Datentypen und imperativen Konstrukte von Java erläutert, die nicht bereits in Mini-Java vorhanden sind. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Unicode Java, als Sprache für das World Wide Web, benutzt einen 16-Bit Zeichensatz, genannt Unicode. Die ersten 256 Zeichen von Unicode sind identisch mit dem 8-Bit Zeichensatz Latin-1, wobei wiederum die ersten 128 Zeichen von Latin-1 mit dem 7-Bit ASCII Zeichensatz übereinstimmen. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Elementare Datentypen und deren Literale Typ boolean Typ int Typ Typ Typ Typ Typ Typ Typ long short byte double float char String Alexander Sczyrba A&D II, Vorlesung 2008 true und false 29 (Dezimalzahl) oder 035 (Oktaldarstellung wegen führender 0) oder 0x1D (Hexadezimaldarstellung wegen führendem 0x) ode 0X1d (Hexadezimaldarstellung wegen führendem 0X) 29L (wegen angehängtem l oder L) short i = 29; (Zuweisung, es gibt kein short-Literal) byte i = 29; (Zuweisung, es gibt kein byte-Literal) 18.0 oder 18. oder 1.8e1 oder .18E2 18.0f (wegen angehängtem f oder F) ’Q’, ’\u0022’, ’\u0b87’ "Hallo (String ist kein elementarer Datentyp) Universität Bielefeld Von Mini-Java zu Java Initialbelegungen Während ihrer Deklaration kann eine Variable wie in Mini-Java initialisiert werden. Beispiel final double PI = 3.141592654; float radius = 1.0f; Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Initialbelegungen Sind für Datenfelder einer Klasse keine Anfangswerte angegeben, so belegt Java sie mit voreingestellten Anfangswerten, abhängig vom Typ des Datenfeldes: Feld-Typ boolean char Ganzzahl (byte, short, int, long) Gleitkommazahl andere Referenzen Alexander Sczyrba A&D II, Vorlesung 2008 Anfangswert false ’\u0000’ 0 +0.0f oder +0.0d null Universität Bielefeld Von Mini-Java zu Java Lokale Variablen Lokale Variablen in einer Methode (oder einem Konstruktor oder einem klassenbezogenen Initialisierungsblock) werden von Java nicht mit einem Anfangswert initialisiert. Vor ihrer ersten Benutzung muss einer lokalen Variablen ein Wert zugewiesen werden (ein fehlender Anfangswert ist ein Fehler). Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Kommentare Beispiel // Kommentar bis zum Ende der Zeile /* Kommentar zwischen */ Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Kommentare Beispiel // Kommentar bis zum Ende der Zeile /* Kommentar zwischen */ Achtung: /* */ können nicht geschachtelt werden! Beispiel /* falsch /* geschachtelter Kommentar */ */ Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Bool’sche Operatoren && || ! logisches und logisches oder logisches nicht Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Bool’sche Operatoren && || ! logisches und logisches oder logisches nicht Die Auswertung eines Bool’schen Ausdrucks erfolgt von links nach rechts, bis der Wert eindeutig feststeht. Folgender Ausdruck ist deshalb robust: Beispiel if(index>=0 && index<array.length && array[index]!=0) ... Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Bitoperatoren Die Bitoperatoren & (und) und | (oder) sind definiert durch: & 0 1 0 0 0 1 0 1 | 0 1 0 0 1 1 1 1 int-Zahlen werden durch diese Operatoren bitweise behandelt. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Bitoperatoren Die Bitoperatoren & (und) und | (oder) sind definiert durch: & 0 1 0 0 0 1 0 1 | 0 1 0 0 1 1 1 1 int-Zahlen werden durch diese Operatoren bitweise behandelt. Beispiel Es seien x und y folgendermaßen gewählt: x = 60 (in Binärdarstellung 00111100) und y = 15 (binär: 00001111). In diesem Fall ist x&y = 12 und x|y = 63: & Alexander Sczyrba A&D II, Vorlesung 2008 x & y 00111100 00001111 00001100 (60) (15) (12) | x | y 00111100 00001111 00111111 (60) (15) (63) Universität Bielefeld Von Mini-Java zu Java Inkrement und Dekrement Man kann den Wert einer Variablen x (nicht den eines Ausdrucks) durch den Operator ++ um 1 erhöhen bzw. durch -- um 1 erniedrigen. Es gibt Präfix- und Postfixschreibweisen, die unterschiedliche Wirkungen haben: Präfixschreibweise: der Wert wird zuerst modifiziert und danach der veränderte Wert zurückgeliefert Postfixschreibweise: der Wert der Variablen wird zuerst zurückgeliefert, dann wird sie modifiziert Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Beispiel Beispiel int i = 10; int j = i++; System.out.println(j); int i = 10; int j = ++i; System.out.println(j); > 10 > 11 Der Ausdruck i++ ist gleichbedeutend mit i = i+1, jedoch wird i nur einmal ausgewertet! Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Beispiel (A) arr[where()]++; Die Methode where() wird einmal aufgerufen. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Beispiel (A) arr[where()]++; Die Methode where() wird einmal aufgerufen. Beispiel (B) arr[where()] = arr[where()]+1; Hierbei wird die Methode where() jedoch zweimal aufgerufen. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Seiteneffekte Seiteneffekte können hier sogar das Ergebnis beeinflussen: In dem Kontext arr[0] = 0; arr[1] = 1; arr[2] = 2; und Beispiel private static int zaehler = 0; private static int where() { zaehler = zaehler+1; return zaehler; } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Seiteneffekte Seiteneffekte können hier sogar das Ergebnis beeinflussen: In dem Kontext arr[0] = 0; arr[1] = 1; arr[2] = 2; und Beispiel Beispiel (A) arr[where()]++; private static int zaehler = 0; private static int where() { zaehler = zaehler+1; return zaehler; } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Seiteneffekte Seiteneffekte können hier sogar das Ergebnis beeinflussen: In dem Kontext arr[0] = 0; arr[1] = 1; arr[2] = 2; und Beispiel Beispiel (A) arr[where()]++; private static int zaehler = 0; private static int where() { zaehler = zaehler+1; return zaehler; } Alexander Sczyrba A&D II, Vorlesung 2008 liefert arr[1] = 2 Universität Bielefeld Von Mini-Java zu Java Seiteneffekte Seiteneffekte können hier sogar das Ergebnis beeinflussen: In dem Kontext arr[0] = 0; arr[1] = 1; arr[2] = 2; und Beispiel Beispiel (A) arr[where()]++; private static int zaehler = 0; private static int where() { zaehler = zaehler+1; return zaehler; } Alexander Sczyrba A&D II, Vorlesung 2008 liefert arr[1] = 2 Beispiel (B) arr[where()] = arr[where()]+1; Universität Bielefeld Von Mini-Java zu Java Seiteneffekte Seiteneffekte können hier sogar das Ergebnis beeinflussen: In dem Kontext arr[0] = 0; arr[1] = 1; arr[2] = 2; und Beispiel Beispiel (A) arr[where()]++; private static int zaehler = 0; private static int where() { zaehler = zaehler+1; return zaehler; } liefert arr[1] = 2 Beispiel (B) arr[where()] = arr[where()]+1; liefert arr[1] = 3 Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Zuweisungsoperatoren Beispiel i += 2; ist gleichbedeutend mit Beispiel i = i+2; außer, dass der Ausdruck auf der linken Seite von i += 2; nur einmal ausgewertet wird (vgl. Inkrement und Dekrement). Entsprechend sind -=, &= und |= definiert. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Die nichtabweisende Schleife Zusätzlich zur abweisenden Schleife gibt es eine nichtabweisende Schleife in Java: Beispiel do statement while(condition); Die condition wird erst nach der Ausführung von statement ausgewertet. Solange sie true ist, wird statement wiederholt. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java for-Schleife Beispiel for(init-statement; condition; increment-statement) statement Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java for-Schleife Beispiel for(init-statement; condition; increment-statement) statement ist gleichbedeutend mit (mit Ausnahme vom Verhalten bei continue): Beispiel { init-statement while(condition) { statement increment-statement } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Übliche Verwendung der for-Schleife: Beispiel for(int i=0; i<=10; i++) { System.out.println(i); } Der Gültigkeitsbereich der (Lauf-)Variablen i beschränkt sich auf die for-Schleife! Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Übliche Verwendung der for-Schleife: Beispiel for(int i=0; i<=10; i++) { System.out.println(i); } Der Gültigkeitsbereich der (Lauf-)Variablen i beschränkt sich auf die for-Schleife! Beispiel (So nicht!) int i = 0; for(int i=0; i<=10; i++) { System.out.println(i); } ist jedoch nicht möglich, da die Variable i vorher schon deklariert wurde. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Die Initialisierungs- bzw. Inkrementanweisung einer for-Schleife kann eine durch Kommata getrennte Liste von Ausdrücken sein. Diese werden von links nach rechts ausgewertet. Beispiel (Arnold & Gosling [1], S. 144) public static int zehnerPotenz(int wert) { int exp, v; for(exp=0,v=wert; v>0; exp++, v=v/10) ; // leere Anweisung return exp; } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Alle Ausdrücke dürfen auch leer sein; dies ergibt eine Endlosschleife: Beispiel for(;;) { System.out.println("Hallo"); } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java if-then-else Anweisung Beispiel if(condition) statement1 else statement2 Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java If-else-Zuordnung Beispiel (Arnold & Gosling [1], S. 139) public double positiveSumme(double[] werte) { double sum = 0.0; if(werte.length > 1) for(int i=0; i<werte.length; i++) if(werte[i] > 0) sum += werte[i]; else // hoppla! sum = werte[0]; return sum; } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Beispiel public double positiveSumme(double[] werte) { double sum = 0.0; if(werte.length > 1) for(int i=0; i<werte.length; i++) if(werte[i] > 0) sum += werte[i]; else // hoppla! sum = werte[0]; return sum; } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Beispiel public double positiveSumme(double[] werte) { double sum = 0.0; if(werte.length > 1) { for(int i=0; i<werte.length; i++) if(werte[i] > 0) sum += werte[i]; } else { sum = werte[0]; } return sum; } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Mehrdimensionale Felder Beispiel public class Array2Dim { public static void main(String[] args) { int[][] feld = new int[3][3]; //Weise feld[i][j] den Wert (i+1)*10+j zu for(int i=0; i<feld.length; i++) { for(int j=0; j<feld[i].length; j++) { feld[i][j] = (i+1)*10+j; System.out.print(feld[i][j]+" "); } System.out.println(); } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Mehrdimensionale Felder Beispiel public class Array2Dim { public static void main(String[] args) { int[][] feld = new int[3][3]; //Weise feld[i][j] den Wert (i+1)*10+j zu for(int i=0; i<feld.length; i++) { for(int j=0; j<feld[i].length; j++) { feld[i][j] = (i+1)*10+j; System.out.print(feld[i][j]+" "); } System.out.println(); } > java Array2Dim 10 11 12 20 21 22 30 31 32 } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Größe mehrdimensionaler Felder Da Felder in Java dynamisch sind, kann bei mehrdimensionalen Feldern jedes verschachtelte Feld eine andere Größe aufweisen. Beispiel public class DemoArray { public static void main(String[] args) { int[][] feld = new int[3][]; for(int i=0; i<feld.length; i++) { feld[i] = new int[i+1]; for(int j=0; j<feld[i].length; j++) { feld[i][j] = (i+1)*10+j; System.out.print(feld[i][j]+" "); } System.out.println(); } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Größe mehrdimensionaler Felder Da Felder in Java dynamisch sind, kann bei mehrdimensionalen Feldern jedes verschachtelte Feld eine andere Größe aufweisen. Beispiel public class DemoArray { public static void main(String[] args) { int[][] feld = new int[3][]; for(int i=0; i<feld.length; i++) { feld[i] = new int[i+1]; for(int j=0; j<feld[i].length; j++) { feld[i][j] = (i+1)*10+j; System.out.print(feld[i][j]+" "); } System.out.println(); } > java DemoArray 10 20 21 30 31 32 } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Intitialisierung von Feldern Felder können bei ihrer Deklaration sofort initialisiert werden: Beispiel public class DemoFeldInitial { public static void main(String[] args) { int[][] feld = {{1,2,3},{4,5},{7,8,9,10}}; //Ausgabe des Feldes for(int i=0; i<feld.length; i++) { for(int j=0; j<feld[i].length; j++) System.out.print(feld[i][j]+" "); System.out.println(); } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java Intitialisierung von Feldern Felder können bei ihrer Deklaration sofort initialisiert werden: Beispiel public class DemoFeldInitial { public static void main(String[] args) { int[][] feld = {{1,2,3},{4,5},{7,8,9,10}}; //Ausgabe des Feldes for(int i=0; i<feld.length; i++) { for(int j=0; j<feld[i].length; j++) System.out.print(feld[i][j]+" "); System.out.println(); } > 1 4 7 java DemoFeldInitial 2 3 5 8 9 10 } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java switch-Anweisung Beispiel switch(expression) { case const1: statement1 break; case const2: statement2 break; ... default: statement } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java switch-Anweisung: break Beispiel public class DemoFuerSwitch { public static void main (String[] args) { for(int i=0; i<=10; i++) switch(i) { case 1: case 2: System.out.println(i+" Fall 1,2"); // -> c3 case 3: System.out.println(i+" Fall 3"); // -> c7 case 7: System.out.println(i+" Fall 7"); break; default: System.out.println(i+" sonst"); } } } Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld Von Mini-Java zu Java switch-Anweisung: break Beispiel public class DemoFuerSwitch { public static void main (String[] args) { for(int i=0; i<=10; i++) switch(i) { case 1: case 2: System.out.println(i+" Fall 1,2"); // -> c3 case 3: System.out.println(i+" Fall 3"); // -> c7 case 7: System.out.println(i+" Fall 7"); break; default: System.out.println(i+" sonst"); } } } Alexander Sczyrba A&D II, Vorlesung 2008 > java DemoFuerSwitch 0 sonst 1 Fall 1,2 1 Fall 3 1 Fall 7 2 Fall 1,2 2 Fall 3 2 Fall 7 3 Fall 3 3 Fall 7 4 sonst 5 sonst 6 sonst 7 Fall 7 8 sonst 9 sonst 10 sonst > Universität Bielefeld Von Mini-Java zu Java K. Arnold, J. Gosling: JavaTM - Die Programmiersprache. Addison-Wesley, 1996. T.H. Cormen, C.E. Leierson, R.L. Rivest: Introduction to Algorithms. MIT Press, 1990. D. Flanagan: Java in a Nutshell. O’Reilly & Associates Inc., 1996. F. Jobst: Programmieren in Java. Hanser Verlag, 1996. H. Klaeren: Vom Problem zum Programm. 2.Auflage, B.G. Teubner Verlag, 1991. K. Echtle, M. Goedicke: Lehrbuch der Programmierung mit Java. dpunkt-Verlag, 2000. Alexander Sczyrba A&D II, Vorlesung 2008 Universität Bielefeld