Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe...

24
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 3. Vorlesung WS 2001/2002
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    218
  • download

    2

Transcript of Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe...

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Thomas H. Kolbe

Einführung in die Programmierung mit Java

3. Vorlesung WS 2001/2002

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

2 2

Übersicht

• Besprechung der Übungsaufgabe

• Nachtrag zu Ausdrücken

– Zahlenkonstanten in arithmetischen Ausdrücken

– Verkürzt ausgewertete logische Ausdrücke

• Kontrollstrukturen

– Schleifen

– bedingte Programmausführung

• Komplexe Datentypen: Arrays

– ein- und mehrdimensionale Arrays

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

3 3

1. Übungsaufgabe vom 31. 10.

Schreiben Sie ein Programm, das bei jedem Aufruf eine zufällige ganze Zahl zwischen 1 und 6 ausgibt.

Lösung: Verwendung von Math.random()

Programm „Zufall.java“

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

double z = Math.random(); // 0 <= z < 1 int würfel = (int) z*6.0+1.0; // 1 <= würfel <= 6

System.out.print("Zufallszahl: "); System.out.println(würfel);}

}

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

4 4

2. Übungsaufgabe vom 31. 10.

Logische Ausdrücke

1. true & false | true

2. (10>2) & (!true==false)

3. true==(4!=3) & !(3<=3)

a) Notieren Sie die Ausdrücke 1.-3. in mathematischer Schreibweise; z.B.: ¬ true (32 true)

b) Wie lauten die Wahrheitswerte der Ausdrücke 1.-3. ?

Lösung zu a)

1. true false true

2. (10>2) (¬true=false)

3. true=(4 3) ¬(33)

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

5 5

Wdh.: Operatorenreihenfolge (Priorität)

Priorität Operatoren Assoziativität

1 + - Vorzeichen (unär) rechts

! logische Negation rechts

(Typ) Typkonversion rechts

2 * / % Multiplikation, Division, Rest links

3 + - Addition, Subtraktion links

4 < <= kleiner, kleiner gleich links

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

5 == Gleichheit links

!= Ungleichheit links

6 & logisches Und links

7 | logisches Oder links

8 = Wertzuweisung links

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

6 6

2. Übungsaufgabe vom 31. 10.

Logische Ausdrücke

1. true & false | true

2. (10>2) & (!true==false)

3. true==(4!=3) & !(3<=3)

a) Notieren Sie die Ausdrücke 1.-3. in mathematischer Schreibweise; z.B.: ¬ true (32 true)

b) Wie lauten die Wahrheitswerte der Ausdrücke 1.-3. ?

Lösung zu a)

1. true false true

2. (10>2) (¬true=false)

3. true=(4 3) ¬(33)

zu b)

true

true

false

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

7 7

Zahlenwerte in arithmetischen Ausdrücken

• ganzzahlige Konstanten (z.B. 113, -73147, 0)werden immer als int interpretiert

• Gleitkommakonstanten (z.B. 3.1415, -4.56e-10, 0.0)werden immer als double interpretiert

• Bei Zuweisung eines konstanten Zahlenwertes zu einer Variablen eines kleineren Typs muss eine explizite Typumwandlung angegeben werden.

Beispiele: float f = (float) 3.0;short kleinezahl = (short) 10;

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

8 8

Kontrollstrukturen: for-Schleife

• dient zur Iteration von Anweisungen

• Syntax:

for ( Initialisierung ; Test ; Inkrementierung )Anweisung; // Schleifenrumpf

• Initialisierung ist eine Anweisung, in der typischerweise eine Zählvariable (i.d.R. ganzzahlig) mit einem Startwert initialisiert wird.

• Test ist ein boolean-Ausdruck. Der Schleifenrumpf wird solange wiederholt, wie der Ausdruck wahr (true) ist.

• Inkrementierung ist eine Anweisung, in der typischerweise die Zählvariable inkrementiert (erhöht) oder dekrementiert (erniedrigt) wird.

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

9 9

Beispiel zur for-Schleife

Anmerkung:Sind im Schleifenrumpf mehrere Anweisungen auszuführen, so sind diese Anweisungen durch geschweifte Klammern zu einem Block zusammenzufassen.

Programm:

class Schleife1 {

public static void main (String args[]) {

int i;

for (i=1; i<=5; i=i+1)

System.out.println("Hallo Welt!");

}

}

Ausgabe:

Hallo Welt!

Hallo Welt!

Hallo Welt!

Hallo Welt!

Hallo Welt!

InitialisierungInitialisierung TestTest InkrementierungInkrementierung

SchleifenrumpfSchleifenrumpf

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

10 10

Kontrollstrukturen: if-then-else

• dient zur bedingten Ausführung von Programmteilen

• Syntax:

if ( boolean-Ausdruck )Anweisung1; // Then-Teil

elseAnweisung2; // Else-Teil

Anmerkung:Sind im Then- oder Else-Teil mehrere Anweisungen auszuführen, so sind diese Anweisungen durch geschweifte Klammern zu einem Block zusammenzufassen.

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

11 11

Beispiel zur for-Schleife und if-then-else

Programm:

class Schleife2 {

public static void main (String args[]) {

int i;

for (i=1; i<=8; i=i+1) {

System.out.print(i);

if (i % 2 == 0) // ist i modulo 2 = 0?

System.out.println(" ist gerade");

else

System.out.println(" ist ungerade");

}

}

}

Ausgabe:

1 ist ungerade

2 ist gerade

3 ist ungerade

4 ist gerade

5 ist ungerade

6 ist gerade

7 ist ungerade

8 ist gerade

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

12 12

Verkürzte Auswertung logischer Ausdrücke (I)

• Vor der Berechnung des Wertes eines (logischen) Operators werden die Werte aller seiner Operatoren bestimmt.

• Die Und-Verknüpfung && (Konjunktion) und Oder-Verknüpfungen || (Disjunktion) verkürzen u.U. die Auswertung:– Eine Oder-Verknüpfung ist generell wahr, sobald der erste wahre

Operand gefunden wird.

– Eine Und-Verknüpfung ist generell falsch, sobald der erste falsche Operand gefunden wird.

– In diesen Fällen werden bei den Operatoren && und || die restlichen Operanden nicht mehr ausgewertet.

– Die Auswertung findet im Regelfall von links nach rechts statt, es sei denn sie wird durch runde Klammern anders vorgegeben.

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

13 13

Verkürzte Auswertung logischer Ausdrücke (II)

• Vorteile von && und || gegenüber & und |

– oftmals schnellere Programmausführung

– Realisierung von Bedingungen mit Vorbedingungen Beispiel:

if (d!=0 && 20/d > 5) ...

Für den Fall d=0 darf der zweite Operand des &&-Operators nicht ausgewertet werden.

• Aber: auch die Nebeneffekte abgekürzter Operatoren werden nicht ausgeführt (wie z.B. Bildschirmausgaben innerhalb von Funktionen u.ä.)

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

14 14

Übung im GIS-Labor

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

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

15 15

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.

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

16 16

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

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

17 17

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];

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

18 18

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).

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

19 19

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];

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

int laenge = my_array.length;

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

20 20

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=1; 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

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

21 21

Übung im GIS-Labor

• Schreiben Sie ein Programm, das ein Array mit 6 double-Werten erzeugt, dieses mit selbst gewählten Werten initialisiert und die Summe dieser 6 Werte ausgibt.

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

22 22

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

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

23 23

Hinweise zu Arrays (II)

• 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.

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

myArray Wert1 Wert2 Wert3

kein simpler Vergleich zweier Arrays möglich:

int[] a={7,12,13,0};int[] b={7,12,13,0};System.out.println(a==b);

ergibt die Ausgabe false

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

24 24

Übungsaufgaben

1. Erzeugen Sie ein Array mit 1000 zufälligen double-Werten und geben Sie das Minimum, das Maximum sowie den Durchschnitt aller Werte aus.

2. Drehen Sie die Reihenfolge der Elemente eines Arrays mit Integerzahlen um und geben Sie das Ergebnis aus.

Beispiel: gegeben: {4,12,67,90,-10,39,0,1}Ausgabe: {1,0,39,-10,90,67,12,4}

a) unter Verwendung eines zweiten Arrays (Zielarray)

b) innerhalb des selben Arrays