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 Hausaufgabe
• Nachtrag zu Ausdrücken
– Typkonvertierung
– Zahlenkonstanten in arithmetischen Ausdrücken
– Reihenfolge der Auswertung
• Mathematische Funktionen: die Klasse "Math"
• Kontrollstrukturen
– for-Schleifen
– bedingte Programmausführung
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
2
Lösung der Hausaufgabe:
Temperaturumrechnung Celsius - Fahrenheit und
umgekehrt: Celsius = 5/9 * (Fahrenheit - 32)
Programm „Temperatur.java“
class Temperatur {
public static void main (String args[]) {
double CelsiusIn = 39.6;
double FahrenheitIn = 451.0;
double FahrenheitOut, CelsiusOut;
CelsiusOut
= 5.0 / 9.0 * (FahrenheitIn - 32);
FahrenheitOut = CelsiusIn * 9 / 5 + 32;
System.out.print("Die Temperatur ");
System.out.print(FahrenheitIn);
System.out.print(" entspricht in Celsius ");
System.out.print(CelsiusOut); ...... }
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
3
Wdh.: Hausaufgaben
• Bearbeitung der Hausaufgaben:
– pro abgegebener Lösung max. zwei Personen
– Abgabe bis spätestens zum Anfang der nächsten
Veranstaltung
• Alle Lösungen bitte in Papierform und bei Programmen
zusätzlich per Email (als Attached Documents) an
[email protected]. Schickt bitte nur die .java-Datei,
nicht die .class. Der Dateiname und folglich auch der
Klassenname müssen den Nachnamen der
Bearbeiterin bzw. des Bearbeiters enthalten!
• Einwurf der Ausarbeitungen in den weißen Briefkasten
im Erdgeschoss, neben dem Ausgang zum Hof
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
4
Typkonversion
• Vom kleineren zum größeren: Problemlos
double d;
int i = 3;
d = i + 7;
• Vom größeren zum kleineren: Explizit
double d = 3.0;
int i;
i = (int) (d + 7);
double d = 3.8;
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
5
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
6
Operatorenreihenfolge (Priorität)
Priorität
Operatoren
Assoziativität
1
+ -
Vorzeichen (einstellig)
rechts
1
(Typ)
Typkonversion
rechts
2
* / %
Multiplikation, Division, Rest
links
3
+ -
Addition, Subtraktion
links
4
=
Wertzuweisung
links
Beispiel:
i = (int) 5.9 + -7 / 3
5
i =
+
3
-2
Ganzzahlige
Division
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
7
Operatorenreihenfolge (Assoziativität)
Priorität
Operatoren
Assoziativität
1
+ -
Vorzeichen (einstellig)
rechts
1
(Typ)
Typkonversion
rechts
2
* / %
Multiplikation, Division, Rest
links
3
+ -
Addition, Subtraktion
links
4
=
Wertzuweisung
links
Beispiel: double i = 5 / 10 / 1.0
Ganzzahlige
Division
0
i =
/ 1.0
0
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
8
Operator + für Zeichenketten ("Strings")
•
Beispiel:
– statt:
System.out.print("Die Temperatur
System.out.print(FahrenheitIn);
System.out.print(" entspricht in
System.out.print(CelsiusOut);
System.out.println(".")
– einfacher:
System.out.print("Die Temperatur
" entspricht in Celsius "
");
Celsius ");
" + FahrenheitIn +
+ CelsiusOut + ".");
• Der Operator "+" verkettet zwei Zeichenketten, wenn
mindestens ein Operand eine Zeichenkette ist.
• Was gibt System.out.print(4 + 7 + "x") aus?
11x
• Was gibt System.out.print("x" + 4 + 7) aus?
x47
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
9
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
10
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
11
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
12
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
13
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
14
Klassen-Dokumentation in Forté (1)
Klassen-Dokumentation
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
15
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
16
Ü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.
Tip: Nutzt die Methode random() der Klasse Math!
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
17
Würfel: Lösung
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
18
Kontrollstrukturen: for-Schleife
• dient zur Iteration (wiederholten Ausführung) 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 (d.h. er ist entweder wahr oder
falsch). 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
19
Beispiel 1 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
20
Beispiel 2 zur for-Schleife
Programm:
class Schleife1 {
public static void main (String args[]) {
int Summe = 0;
int i;
for (i=1; i<=5; i=i+1)
Summe = Summe + i;
System.out.println(Summe);
Ausgabe:
1
3
6
10
15
}
}
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
21
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
22
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
23
Hausaufgabe:
Erzeugt 1000 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.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
24
Herunterladen