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

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe
Einführung in die
Programmierung mit Java
2. Vorlesung WS 2001/2002
Übersicht
• Besprechung der Übungsaufgabe
• Struktur von Java-Programmen
– Aufbau eines Java-Programms
– Sprachelemente
• Variablen und primitive Datentypen
– Wertzuweisung
• Ausdrücke und Operatoren
– arithmetische Terme
– Boolesche Ausdrücke (Aussagenlogik)
• Typkonversion
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
2
Übungsaufgabe vom 24. 10.
• Ausgabe einer Visitenkarte auf dem Bildschirm
z.B.:
**********************************
*
*
* Thomas H. Kolbe
*
* Wissenschaftlicher Assistent *
* am IKG, Uni Bonn
*
*
*
**********************************
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
3
Lösung:
Folge von Ausgabe-Anweisungen
Programm „Visitenkarte.java“
class Visitenkarte {
public static void main (String args[]) {
System.out.println("********************************");
System.out.println("*
*");
System.out.println("* Thomas H. Kolbe
*");
System.out.println("* Wissenschaftlicher Assistent *");
System.out.println("* am IKG, Uni Bonn
*");
System.out.println("*
*");
System.out.println("********************************");
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
4
Struktur von Java-Programmen
• Programme bestehen aus Klassen (class)
• Klassen bestehen aus Methoden (und Feldern)
• Methoden bestehen aus einer Folge von Anweisungen
• Genau eine Klasse hat Methode "main"
(Hauptprogramm)
• Jede Klasse (class-Definition) muss in einer eigenen,
gleichnamigen Quelltextdatei definiert werden (.java)

ergo: pro Klasse eine Datei und umgekehrt
• Groß-/Kleinschreibung im Quelltext ist signifikant
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
5
Das minimale Java-Programm
• besteht aus genau einer Klasse
• mit genau der Methode main, die das
Hauptprogramm enthält.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
6
Erläuterung am Programm Rechnen.java
Programm „Rechnen.java“:
// Programm Rechnen.java
Dateiname entspricht
Klassendefinition
// Errechnet 12+32*4 und gibt das Ergebnis aus.
dem Klassennamen
// Autor: T. Kolbe
(auch bzgl. Groß-/
Kleinschreibung)
class Rechnen {
public static void main (String args[]) {
System.out.println("12+32*4 ergibt");
System.out.println(12+32*4);
}
}
Methoden-
definition
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
7
Sprachelemente
• Anweisung
– einzelner Befehl oder Methodenaufruf
• Block
– Gruppierung von Befehlen
• Ausdruck
– Term, der einen Wert besitzt bzw. zurückliefert
• Kommentare
• Bezeichner
– selbst vergebene Namen für Klassen, Variablen etc.
• Groß-/Kleinschreibung ist signifikant!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
8
Wdh.: Kommentare im Programmquelltext
• Zur Erhöhung der Lesbarkeit sollten alle Programmteile
durch Kommentare näher erläutert werden.
– Kommentare werden vom Compiler überlesen
• Einzeilige Kommentare
– Einleitung durch //
– Beendigung durch Zeilenende
– Beispiel:
// Dies ist ein Kommentar
• Längere Kommentare (auch über mehrere Zeilen)
– Einleitung mit /*
– Beendigung durch */
– Beispiel:
/* Dies ist ein Kommentar */
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
9
Bezeichner
• Bezeichner sind vom Programmierer zu vergebene
Namen für
– Klassen, Methoden, (Pakete)
– Variablen
• Syntax: Beliebig lange Zeichenfolge aus
– Buchstaben inkl. Umlaute
– Ziffern
– Dem Dollarzeichen $ oder dem Unterstrich _
• Bezeichner müssen mit einem Buchstaben anfangen
• Keine Schlüsselwörter
– Schlüsselwörter sind reservierte Wörter wie z.B. class, void,
true, false, null, ...
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
10
Erläuterung am Programm Rechnen.java
Programm „Rechnen.java“:
3 Kommentarzeilen
// Programm Rechnen.java
// Errechnet 12+32*4 und gibt das Ergebnis aus.
// Autor: T. Kolbe
Bezeichner
class Rechnen {
public static void main (String args[]) {
System.out.println("12+32*4 ergibt");
System.out.println(12+32*4);
}
}
Schlüsselwörter
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
11
Anweisungen
• Anweisungen werden verwendet
– zur Definition von Klassen und Methoden
– zur Deklaration von Variablen
– zum Aufruf von Methoden (vglb. Prozeduren in C, Pascal)
– zum Aufruf eingebauter Befehle: Kontrollstrukturen,
Wertzuweisungen zu Variablen, ...
• Eine ausgeführte Anweisung gibt i.d.R. keinen
Rückgabewert zurück
• Jede Anweisung muß im Quelltext mit einem
Semikolon (;) abgeschlossen werden
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
12
Blöcke
• Ein Block dient zur Gruppierung einer Folge von
Anweisungen
• Syntax:
{
}
Anweisung1;
...
Anweisungn;
• Die Anweisungen innerhalb eines Blocks werden nach
außen als eine Anweisung betrachtet
• Innerhalb eines Blocks werden Anweisungen in der
Reihenfolge ausgeführt, in der sie im Quelltext stehen.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
13
Erläuterung am Programm Rechnen.java
Programm „Rechnen.java“:
1. Block:
// Programm
Rechnen.java
2. Block:
Klassendefinition
// Errechnet
12+32*4 und gibt das Ergebnis
aus.
Methodendefinition
// Autor: T. Kolbe
class Rechnen {
public static void main (String args[]) {
System.out.println("12+32*4 ergibt");
System.out.println(12+32*4);
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
14
Variablen: Deklaration
• Variablen sind Platzhalter für Werte
• Variablen müssen vor der Verwendung deklariert
(„angemeldet“) werden.
• Variablendeklaration: Typ Variablenbezeichner;
int i;
boolean b;
char my_char;
double meinezahl;
Mehrere Variablen gleichen Typs: Typ V1,...,Vn ;
int i, j, k;
char zeichen_a, zeichen_b;
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
15
Primitive Datentypen
Typ
Länge
Bereich
byte
8 Bits
-128 bis 127
short
16 Bits
-32768 bis 32767
int
32 Bits
-2147483648 bis 2147483647
long
64 Bits
noch viel größer als int
float
32 Bits
+/- 3.4E+38 (8 Stellen genau) Komma-
Ganze Zahlen
zahlen
double
64 Bits
+/- 1.8E+308 (17 Stellen genau)
char
16 Bits
65536 verschiedene Zeichen
boolean
1 Bit
true oder false
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
16
Variablen: Wertzuweisung
• Wertzuweisung: Variable = Ausdruck;
i = 34;
b = true;
j = i+2;
meinezahl = 3.1415;
• Deklaration und Wertzuweisung in einem Schritt:
int i = 34;
double meinezahl = 3.1412;
• Die erste Wertzuweisung zu einer Variablen wird auch
als ihre Initialisierung bezeichnet.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
17
Ausdrücke
• Alle Operationen, die einen Wert zurückliefern,
stellen einen Ausdruck dar
• Einfache Ausdrücke sind
– konstante Werte, wie z.B. 5 oder 3.14152 oder true
– Variablen, wie z.B. t oder meineVariable
– Funktionsaufrufe (Methoden, die einen Wert zurückliefern)
• Der Wert eines Ausdrucks wird als Rückgabewert
bezeichnet
• Der Rückgabewert besitzt einen Typ
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
18
Komplexe Ausdrücke
• Komplexe Ausdrücke entstehen durch Verknüpfung
von Ausdrücken mittels Operatoren
– Rekursive Definition: Komplexe Ausdrücke sind ebenfalls
wieder Ausdrücke
• Runde Klammern beeinflussen die
Auswertungsreihenfolge
• Beispiele:
– 3+4*12
– (3+4)*12
– (2.0 + Math.sin(3.1)) / Math.tan(x – Math.cos(0.85))
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
19
Operatoren: Stelligkeit
• Unäre oder monadische (einstellige) Operatoren 
– haben einen Operanden x
– Syntax: Funktionsaufruf  (x) oder Präfix-Darstellung  x
– Beispiele: Math.sin(x) oder –10
• Binäre oder dyadische (zweistellige) Operatoren 
– haben zwei Operanden x und y
– Syntax: Funktionsaufruf  (x,y) oder Infix-Darstellung x  y
– Beispiele: a+b oder 10 / 2 oder meineFunktion(32, x)
• Ternäre oder tryadische (dreistellige) Operatoren 
– haben drei Operanden x, y und z
– Syntax: Funktionsaufruf  (x,y,z)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
20
Arithmetische Ausdrücke
• Ist der Rückgabewert eines Ausdrucks vom Typ
– byte, short, int oder long (ganzzahlig) oder
– float oder double („Kommazahl“),
so wird dieser als arithmetischer Ausdruck
bezeichnet.
• Die Operanden von arithmetischen Operatoren sollten
im Regelfall vom selben Typ sein
– Beispiele:
4+2
5.21 / 1.0
(int)
(double)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
21
Arithmetische Operatoren
• +, -, *, / : Addition, Subtraktion, Multiplikation, Division
• Division: ganzzahlig, wenn beide Operanden ganzzahlig sind,
sonst float/double
int i = 9 / 4;
double d = 3.6 / 6;
//i ist 2
//d ist 0.6
• Modulo-Operator %: Rest der Ganzzahldivision
int i = 5;
int j = i % 3;
// j ist 2
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
22
Übung im GIS-Labor
• Schreiben Sie ein Programm, das den Umfang und
den Flächeninhalt eines Kreises mit Radius r (floatVariable) berechnet (pi  3.14159). Die Ausgabe
sollte etwa folgendermaßen aussehen:
Ein Kreis mit Radius 5.0 hat den Umfang
31.4159 und den Flächeninhalt 78.53975.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
23
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
24
Benutzung von Funktionen der Klasse Math
• Die wichtigsten mathematischen Funktionen sind in
der Klasse Math definiert.
• Die Klasse Math ist Bestandteil der StandardFunktionsbibliothek java.lang
• Zur Benutzung der Funktionen (präziser: Methoden)
sind keine besonderen Vorbereitungen notwendig
– Aufruf der Funktion f(x) durch Voranstellen von „Math.“
Beispiel:
double a = Math.sin(34.21);
• Die Funktionen sind in der Online-Dokumentation von
Java (des JDK) erläutert.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
25
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
26
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
27
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
28
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
29
Klassen-Dokumentation in Forté (1)
Klassen-Dokumentation
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
30
Klassen-Dokumentation in Forté (2)
Alle Klassen der
Java-StandardBibliothek
Erläuterungen
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
31
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.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
32
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
33
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
34
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
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
35
Übungsaufgaben
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. ?
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
36
Herunterladen