einführung in die programmierung mit java

27
Institut für Kartographie und Geoinformation Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit Java 4. Vorlesung WS 2004/2005

Upload: jaguar

Post on 12-Jan-2016

14 views

Category:

Documents


0 download

DESCRIPTION

Einführung in die Programmierung mit Java. 4. Vorlesung WS 2004/2005. Hausaufgabe:. Erzeugt 4 zufällige double-Werte und gebt das Minimum, das Maximum sowie den Durchschnitt aller Werte aus. Hinweis: Das Minimum (Maximum) der Werte ist der kleinste (größte) aller Werte. Hausaufgabe: Lösung. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Einführung in die Programmierung mit Java

Institut für Kartographie und GeoinformationDr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag

Einführung in die Programmierung mit Java

4. Vorlesung WS 2004/2005

Page 2: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

2 2

Hausaufgabe:

Erzeugt 4 zufällige double-Werte und gebt das Minimum, das Maximum sowie den Durchschnitt aller Werte aus.

Hinweis: Das Minimum (Maximum) der Werte ist der kleinste (größte) aller Werte.

Page 3: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

3 3

Hausaufgabe: Lösung

public class MinMaxDurchschnitt{

public static void main(String[] args) {

double min, max;

double a1 = Math.random(); double a2 = Math.random();

double a3 = Math.random(); double a4 = Math.random();

max = Math.max(a1,a2);

max = Math.max(max,a3);

max = Math.max(max,a4);

min = Math.min(a1,a2);

min = Math.min(min,a3);

min = Math.min(min,a4);

double durchschnitt = (a1 + a2 + a3 + a4)/4;

System.out.println(...);

}

}

Page 4: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

4 4

Übersicht

• Boolesche Ausdrücke (Werte wahr/falsch)

– Relationale Operatoren (==, >,<, ..)

– boolesche Operatoren (und, oder, nicht)

• Kontrollstrukturen

– while

– do - while

– switch

– break

• Arrays

Page 5: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

5 5

Boolesche Ausdrücke

• Bedingungen in if oder for: Boolesche Ausdrücke • Boolesche Ausdrücke liefern als Rückgabewert

nur einen der zwei (Wahrheits-)Werte true oder false• Beispiele:

– if(i == 0) ...– for(int i = 0 ; i < 1000 ; i = i + 1)...

Page 6: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

6 6

Relationale Operatoren• Relationale Operatoren bilden spezielle Boolesche Ausdrücke• Relationale Operatoren setzen ihre Operanden zueinander in

Beziehung und liefern den Wahrheitswert der Beziehung zurück.

– Beispiele: 5 < 3 ergibt false(4-2)=2 ergibt true

Mathem. Notation Java Erläuterung

= == Identität (Gleichheit)

!= Ungleichheit

< < kleiner als

<= kleiner oder gleich als

> > größer als

>= größer oder gleich als

Page 7: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

7 7

Arithmetische und Boolesche Ausdrücke

• Die Operanden von Relationalen Operatoren können arithmetische Ausdrücke sein

• Beispiel:Math.min(5,9) == 5 * 5 - 20 * Math.sin(Math.Pi/2)

Arithmetischer Ausdruck

5

Arithmetischer Ausdruck

5

BoolescherAusdruck

wahr

Page 8: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

8 8

Komplexe Boolesche Ausdrücke

• Bildung komplexer Boolescher Ausdrücke mit aussagenlogischen Operatoren (nicht, und, oder):

• Nicht / Negation: ¬ true = falsein Java: ! Wert ¬ false = true

• Und-Verknüpfung: false false = falsein Java: Wert1 & Wert2 false true = false

true false = falsetrue true = true

• Oder-Verknüpfung: false false = false in Java: Wert1 | Wert2 false true = true

true false = truetrue true = true

• Beispiel: ((x < 7) | (y == 6)) & !(z < 5)

• Wert bei x = 2 ; y = 6 ; z = 1?

Page 9: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

9 9

Operatorenreihenfolge (Priorität)

Priorität Operatoren Assoziativität

1 + - Vorzeichen (unär) rechts

1 ! logische Negation rechts

1 (Typ) Typkonversion rechts

2 * / % Multiplikation, Division, Rest links

3 + - Addition, Subtraktion links

4 < <= kleiner, kleiner gleich links

4 > >= größer, größer als links

5 == Gleichheit links

5 != Ungleichheit links

6 & logisches Und links

7 | logisches Oder links

8 = Wertzuweisung rechts

Page 10: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

10 10

Beispiel: For-Schleife mit komplexer Bedingung

• Es sollen die Zahlen von 1 bis 100 addiert werden, jedoch soll vorher abgebrochen werden,wenn die Summe die Zahl 2000 erreicht hat.

int Summe =0;

for(int i = 1; (i <= 100 & Summe < 2000); i = i+1)

{

Summe = Summe + i;

}

Page 11: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

11 11

Übung im GIS-Labor

• Schreibt ein Programm, das die Zahlen von 1 bis 50 aufzählt, wobei anstelle der durch drei oder durch sieben, aber nicht durch 5 teilbaren Zahlen „autsch“ ausgegeben werden soll.

• Tip: Verwendet die Operation % (Rest der ganzzahligen Division): • z.B. 11 % 3 = 2 (11 geteilt durch 3 ist 9 mit Rest 2)• z.B. 33 % 9 = 6 (33 geteilt durch 9 ist 27 mit Rest 6)

Page 12: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

12 12

Kontrollstrukturen: while- und do-while-Schleife

while-Schleife:

Syntax:

while ( boolean-Ausdruck )

Anweisung;

• Schleife mit Eintrittsbedingung– Anweisung wird 0 bis

x-mal ausgeführt

do-while-Schleife:

Syntax:

do

Anweisung;

while ( boolean-Ausdruck );

• Schleife mit Wiederholungsbedingung– Anweisung wird mindestens

einmal ausgeführt

Hinweis: Sollen mehrere Anweisungen im Schleifenrumpf aus-geführt werden, so müssen diese durch geschweifte Klammern zu einem Block zusammengefasst werden.

Page 13: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

13 13

Übung im GIS-Labor

• Schreibt ein Programm, das die natürlichen Zahlen solange summiert, bis die Summe die Zahl 3000 erstmals überschreitet. Gebt die Summe und die Anzahl der natürlichen Zahlen aus.

• Tip: Verwendet while-Schleifen:– while ( boolean-Ausdruck )

Anweisung;

– do Anweisung;

while ( boolean-Ausdruck );

Page 14: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

14 14

Kontrollstrukturen: switch-Anweisung

• dient zur Realisierung von Fallunterscheidungen

• Syntax:

switch (Ausdruck ) {case Wert1 : Anweisung1; // 1. Fall Ausdruck=Wert1case Wert2 : Anweisung2; // 2. Fall Ausdruck=Wert2. . . default: Ansonsten-Anweisung; // ansonsten}

• es werden alle Anweisungen ab der ersten erfüllten case-Bedingung ausgeführt (inkl. der Ansonsten-Anweisung )

• Ausdruck muss vom Typ byte, short, int oder char sein

• Werti muss eine Konstante vom gleichen Typ wie Ausdruck sein

Page 15: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

15 15

Beispiel 1 zur switch-Anweisung

Programm:

class Switch1 {public static void main (String args[]) {

int i;for (i=0; i < 10; i=i+1)

switch(i) {case 1: System.out.println("eins");case 2: System.out.println("zwei");case 5: System.out.println("fünf");default: System.out.println(i);}

}}

Ausgabe:

0einszweifünf1zweifünf234fünf56789

Problem: fehlerhafte Ausgabe, da jeweils nach der ersten passenden case-Bedingung alle anderen Anweisungen ohne weitere Überprüfung ausgeführt werden!

Page 16: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

16 16

Die break-Anweisung (1)

• dient zum Abbruch von switch-Fallunterscheidungen

• Syntax:

switch ( Ausdruck ) {case Wert1 : { Anweisung1; break; }case Wert2 : { Anweisung2; break; }. . . default: Ansonsten-Anweisung;}

• Der Programmablauf wird bei Ausführung eines break-Befehls hinter der switch-Anweisung fortgesetzt!

Page 17: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

17 17

Beispiel 2 zur switch-Anweisung

Programm:

class Switch2 {public static void main (String args[]) {

int i;for (i=0; i < 10; i=i+1)

switch(i) {case 1: {System.out.println("eins"); break;}case 2: {System.out.println("zwei"); break;}case 5: {System.out.println("fünf"); break;}default: System.out.println(i);}

}}

Ausgabe:

0einszwei34fünf6789

Die Ausgabe ist nun korrekt, da die switch-Anweisung jeweils nach der Ausführung der passenden case-Bedingung mittels break verlassen wird.

Page 18: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

18 18

Die break-Anweisung (2)

• kann auch zum Abbruch von Schleifen (for, while, do-while) eingesetzt werden

Beispiel while-Schleife:

while ( boolean-Ausdruck1 ) {. . .if ( boolean-Ausdruck2 ) break; // Abbruch. . . }

• Der Programmablauf wird hinter der Schleifenanweisung fortgesetzt

Page 19: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

19 19

Arrays

• Bisher: primitive Datentypen (int, double, ...)

• Arrays als erster nicht-primitiver Datentyp

• Alle Werte haben denselben Typ (z.B. int)

• Zugriff über Index:my_array[2] = 12;

• Indizes fangen mit 0 an

Index Wert

0 45

1 -117

2 12

3 0

4 999

Integer-Array mit fünf Elementen

Page 20: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

20 20

Arbeiten mit Array-Variablen (I)

3 Schritte: (nur Schritt 2 ist wirklich neu)

1. Deklaration int[] my_array; // Array von Integerzahlen

2. Instantiierung my_array = new int[3];

// Erschafft Array mit 3

Elem.

3. Initialisierung my_array[0] = 17;

my_array[1] = 0;

my_array[2] = -

4*my_array[0];

Page 21: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

21 21

Arbeiten mit Array-Variablen (II)

Alternative:

• alle drei Schritte auf einmal

• Deklaration mit impliziter Erschaffung und Initialisierung:

int[] my_array = {45, -117, 12, 0, 999};

erschafft ein 5-elementiges Array und initialisiert es mit den

aufgezählten Werten (angefangen bei Index 0).

Page 22: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

22 22

Hinweise zu Arrays (I)

• Größe eines Arrays kann erst zur Laufzeit feststehen:int[] my_array;int i = ...; //zur Laufzeit berechnetmy_array = new int[i];

• Die Größe eines einmal instantiierten Arrays kann nicht verändert werden.

• Größe eines Arrays kann mittels arrayname.length abgefragt werden:

int laenge = my_array.length;

Page 23: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

23 23

Beispiel zu Arrays

Programm:

// Bestimmung der kleinsten Zahl eines ganzzahligen Arrays

class Minimum { public static void main (String args[]) { int[] my_array = {45,12,1,13,-4,0,-23,1001}; int minimum, i;

minimum=my_array[0]; for (i=0; i<my_array.length; i=i+1) if (my_array[i]<minimum) minimum=my_array[i];

System.out.print("Die kleinste Zahl ist "); System.out.println(minimum);

}}

Ausgabe:

Die kleinste Zahl ist -23

Page 24: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

24 24

Mehrdimensionale Arrays

• Anwendungen– zweidimensional: Repräsentation von Matrizen– zwei- und mehrdimensional: Speicherung von Wertetabellen

• Mehrdimensionale Arrays werden durch Arrays von Arrays dargestellt

• Syntax zur Deklaration und Instantiierung eines n-dimensionalen Arrays:

Typ [ ][ ]...[ ] Arrayname = new Typ [d1][d2]...[dn];

• Beispiel:

int[][] matrix = new int[6][3];

erschafft eine zweidimensionale Matrix mit 6 Zeilen und 3 Spalten

Page 25: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

25 25

Hinweise zu Arrays (I)

• Arrays sind keine primitiven Datentypen– Array-Variablen enthalten nicht selbst das Array, sondern

verweisen auf ein Array, das durch new irgendwo im Hauptspeicher angelegt wird (Array-Variablen sind Referenzen).

Beispiel: int[] myArray=new int[3];

myArray Wert1 Wert2 Wert3

kein simpler Vergleich zweier Arrays möglich:int[] a = {7,12,13,0}; int i = 3;

int[] b = {7,12,13,0}; int j = 3;

System.out.println(a = = b); System.out.println(i = = j);

ergibt die Ausgabe false ergibt die Ausgabe true

Page 26: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

26 26

Hinweise zu Arrays (II)

• Arrayvariablen sind Referenzen– Wertzuweisung zweier Arrayvariablen kopiert nicht das Array,

sondern setzt beide auf denselben Speicherbereich:– Bsp:

int[] a = {1,2,3};int[] b = {4,5,6};a = b;a[0] = 77;System.out.println(b[0]);

a

1 2 3 4 5 6

b

vor Wertzuweisung a = b

a

1 2 3 4 5 6

b

nach Wertzuweisung a = b

Page 27: Einführung in die Programmierung mit Java

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05

27 27

Hausaufgabe

Schreibt ein Programm, das den Wert einer ganzzahligen Variablen w im Bereich von 20 bis 99 so als Text ausgibt, wie er ausgesprochen wird. Gebt dabei alle Werte von 20 bis 99 entsprechend aus.

Ausgabe: w = 20 Ausgabe: "zwanzig" ..................... w = 98 Ausgabe: „achtundneunzig" w = 99 Ausgabe: "neunundneunzig"