Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger
Einführung in die
Programmierung mit Java
3. Vorlesung WS 2002/2003
Ü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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
2
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;
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
3
Typkonversion
• Problemlos (vom kleineren zum größeren):
double d;
int i = 3;
d = i + 7;
Primitive Datentypen
• Explizit (vom größeren zum kleineren):
double d = 3.0;
int i;
i = (int) (d + 7);
Wert_mit_neuem_Typ = (Typname) Wert_mit_altem_Typ
explizite Typkonvertierung wird als Casting bezeichnet
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
4
Mathematische Funktionen: die Klasse "Math"
• Die wichtigsten mathematischen Funktionen sind in
der Klasse Math definiert.
• Funktionen (präziser: Methoden) von Math können in
Ausdrücken verwendet werden
– Aufruf der Funktion f(x) durch Voranstellen von des
Klassennamens „Math.“
– Beispiel: double a = Math.sin(34.21);
• Die Klasse Math ist Bestandteil der StandardFunktionsbibliothek java.lang
• Die Funktionen sind in der Online-Dokumentation von
Java (des JDK) erläutert.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
5
Funktionen der Klasse Math (1)
• Trigonometrische Funktionen
– double sin(double x)
Sinus
– double cos(double x)
Cosinus
– double tan(double x)
Tangens
– double asin(double x)
Arcussinus (sin-1)
– double acos(double x)
Arcuscosinus (cos-1)
– double atan(double x)
Arcustangens (tan-1)
Winkel werden im Bogenmaß angegeben!
• Potenzierung, Wurzeln, Logarithmen
–
–
–
–
double exp(double x)
double log(double x)
double pow(double x, double y)
double sqrt(double x)
Eulerfunktion ex
natürlicher Logarithmus
xy
Quadratwurzel
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
6
Funktionen der Klasse Math (2)
• Minimum und Maximum
–
–
–
–
int min(int x, int y)
long min(long x, long y)
float min(float x, float y)
double min(double x, double y)
minimum(x,y)
minimum(x,y)
minimum(x,y)
minimum(x,y)
–
–
–
–
int max(int x, int y)
long max(long x, long y)
float max(float x, float y)
double max(double x, double y)
maximum(x,y)
maximum(x,y)
maximum(x,y)
maximum(x,y)
• Mathematische Konstanten (Pi, E)
– double PI
– double E
Kreiszahl 
Eulerzahl e
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
7
Funktionen der Klasse Math (3)
• Runden und Abschneiden
–
–
–
–
int abs(int x)
long abs(long x)
float abs(float x)
double abs(double x)
– double ceil(double x)
– double floor(double x)
– int round(float x)
|x|
|x|
|x|
|x|
x
x
 x+0.5 
• Zufallszahlen
– double random()
0  Zufallszahl < 1
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
8
Die Klassen-Dokumentation des JDK
• Alle Klassen der Standard-Funktionsbibliothek sind
vollständig dokumentiert
3. Aufklappen
des
• 1.Dokumentation
über Forté:
Anwählen des ist abrufbar
JavadocEdit-Tabs
Verzeichnisses
4. Öffnen des
Browsers durch
Doppelklick auf
index
2. Anwählen des
Javadoc-Tabs
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
9
Klassen-Dokumentation in Forté (1)
Klassen-Dokumentation
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
10
Klassen-Dokumentation in Forté (2)
Alle Klassen der
Java-StandardBibliothek
Erläuterungen
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
11
Boolesche Ausdrücke
• Ist der Rückgabewert eines Ausdrucks vom Typ
boolean, so wird dieser als Boolescher Ausdruck
bezeichnet (nach dem Mathematiker George Boole).
• Boolesche Ausdrücke können nur die zwei
(Wahrheits-)Werte true oder false annehmen.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
12
Komplexe Boolesche Ausdrücke
Komplexe Boolesche Ausdrücke werden mit den
Mitteln der Aussagenlogik gebildet:
•
Nicht / Negation:
¬ true = false
¬ false = true
Negation in Java: ! Wert
false  false = false
false  true = false
true  false = false
true  true = true
Und-Verknüpfung in Java: Wert1 & Wert2
•
Und-Verknüpfung:
•
Oder-Verknüpfung:
false  false = false
false  true = true
true  false = true
true  true = true
Oder-Verknüpfung in Java: Wert1 | Wert2
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
13
Relationale Operatoren
• 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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
14
Operatorenreihenfolge (Priorität)
Priorität
1
Operatoren
Assoziativität
+ -
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
==
Gleichheit
links
!=
Ungleichheit
links
6
&
logisches Und
links
7
|
logisches Oder
links
8
=
Wertzuweisung
links
5
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
15
Übung im GIS-Labor
Simulation eines Würfels:
Schreibt ein Programm, das bei jedem Aufruf eine
zufällige ganze Zahl zwischen 1 und 6 ausgibt.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
16
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);
}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
17
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  (32  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)  ¬(33)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
18
Wdh.: Operatorenreihenfolge (Priorität)
Priorität
1
Operatoren
Assoziativität
+ -
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
==
Gleichheit
links
!=
Ungleichheit
links
6
&
logisches Und
links
7
|
logisches Oder
links
8
=
Wertzuweisung
links
5
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
19
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  (32  true)
b) Wie lauten die Wahrheitswerte der Ausdrücke 1.-3. ?
Lösung
zu a)
zu b)
1. true  false  true
 true
2. (10>2)  (¬true=false)
 true
3. true=(4  3)  ¬(33)
 false
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
20
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.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
21
Beispiel zur for-Schleife
Programm:
Initialisierung
Test
Inkrementierung
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
Hallo
Hallo
Hallo
Hallo
Welt!
Welt!
Welt!
Welt!
Welt!
Schleifenrumpf
Anmerkung:
Sind im Schleifenrumpf mehrere Anweisungen auszuführen, so
sind diese Anweisungen durch geschweifte Klammern zu einem
Block zusammenzufassen.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
22
Kontrollstrukturen: if-then-else
• dient zur bedingten Ausführung von Programmteilen
• Syntax:
if ( boolean-Ausdruck )
Anweisung1;
else
Anweisung2;
// Then-Teil
// Else-Teil
Anmerkung:
Sind im Then- oder Else-Teil mehrere Anweisungen
auszuführen, so sind diese Anweisungen durch geschweifte
Klammern zu einem Block zusammenzufassen.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
23
Beispiel zur for-Schleife und if-then-else
Programm:
Ausgabe:
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");
}
}
}
1
2
3
4
5
6
7
8
ist
ist
ist
ist
ist
ist
ist
ist
ungerade
gerade
ungerade
gerade
ungerade
gerade
ungerade
gerade
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
24
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 OderVerknü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.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
25
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.ä.)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
26
Ü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.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
27
Kontrollstrukturen: while- und do-while-Schleife
while-Schleife:
do-while-Schleife:
Syntax:
Syntax:
while ( boolean-Ausdruck )
Anweisung;
do
• Schleife mit
Eintrittsbedingung
• Schleife mit
Wiederholungsbedingung
– Anweisung wird 0 bis
x-mal ausgeführt
Anweisung;
while ( boolean-Ausdruck );
– Anweisung wird mindestens
einmal ausgeführt
Hinweis: Sollen mehrere Anweisungen im Schleifenrumpf ausgeführt werden, so müssen diese durch geschweifte Klammern
zu einem Block zusammengefasst werden.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
28
Arrays
Index
Wert
0
45
1
-117
2
12
3
0
4
999
Integer-Array mit
fünf Elementen
• 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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
29
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];
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
30
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).
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
31
Hinweise zu Arrays (I)
• Größe eines Arrays kann erst zur Laufzeit feststehen:
int[] my_array;
int i = .... //zur Laufzeit berechnet
my_array = new int[i];
• Größe eines Arrays kann mittels arrayname.length
abgefragt werden:
int laenge = my_array.length;
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
32
Beispiel zu Arrays
Programm:
Ausgabe:
// 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;
Die kleinste
Zahl ist -23
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);
}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
33
Ü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.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
34
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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
35
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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
36
Übungsaufgaben
1. Erzeugen Sie ein Array mit 1000 zufälligen doubleWerten 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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
37
Übung im GIS-Labor
1. Simulation eines Würfels:
Schreiben Sie ein Programm, das bei jedem Aufruf
eine zufällige ganze Zahl zwischen 1 und 6 ausgibt.
2. Logische Ausdrücke
a) true & false | true
b) (10>2) & (!true==false)
c) true==(4!=3) & !(3<=3)
1. Notieren Sie die Ausdrücke 1.-3. in mathematischer
Schreibweise; z.B.: ¬ true  (32  true)
2. Wie lauten die Wahrheitswerte der Ausdrücke 1.-3. ?
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
38
Herunterladen