Algorithmen und Datenstrukturen II

Werbung
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
Herunterladen