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 (32 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