der Universität Oldenburg

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Imperative Programmierung
der Universität Oldenburg
Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Forschungszentrum caesar
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Variablen und Datentypen
Zusammenfassung der Vorwoche
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
der Universität Oldenburg
der Universität Oldenburg
Imperative Programmierung -Entwicklungswerkzeuge
Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Grundlagen der Sprache
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Programmier-sprache Java Weiter mit PP..
DO...WHILE Anweisung.
Robotik mit LEGO Mindstorms
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Einführung in die Programmierung mit Java
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
DVG Einführung in Java1 Einführung in JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
boolean Datentyp und Operator
Grundkonzepte Java - Klassendefinition
Einführung in die Programmiersprache C 1
Programmieren Kapitel 3 – Variablen.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Allgemeines zu Java Universelle, objektorientierte Programmiersprache
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Die Klasse String und ihre Methoden
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Datentypen: integer, char, string, boolean
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
PI Burgenland Java und JavaScript 1. Teil
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Übersicht Nachtrag zu Ausdrücken
Anführungszeichen?! echo 'Apfel$atf'; // ergibt: Apfel$aft
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Einführung in die Programmierung mit Java
Variablen und Datentypen
Hello World! Javakurs 2013 Arne Kappen
Java-Kurs - 4. Übung weitere Kontrollstrukturen
SS 04 Christiane Rauh Christian Hellinger
 Präsentation transkript:

der Universität Oldenburg Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich Boles

Gliederung von Vorlesung 4 Java-Grundlagen Java-Programme Zeichensätze Kommentare Token Schlüsselwörter Bezeichner Variablen Motivation Datentypen Initialisierung Ausdrücke Motivation Definition Operatoren Erweiterung des Hamster-Modells

Grundlagen / Java-Programme Erstellen und Ausführen: (1) Eingeben eines Programms (2) Compilieren (javac) evtl. Syntaxfehler beseitigen! (3) Ausführen (java) Beispiel: (1) Datei „World.java“ : (2) javac World.java (3) java World import java.io.*; public class World { public static void main(String[] args) { try { System.out.println(„Hello world!“); } catch (Exception e) { System.out.println(„Fehler!“); } } } „to-do“-Code

Grundlagen / Zeichensätze Java zugrundeliegender Zeichensatz: Unicode 16-Bit-Zeichensatz (216 Zeichen) ersten 256 Zeichen: Latin-1 ersten 128 Zeichen: ASCII (7-Bit-Zeichensatz) Escape-Sequenz \udddd als (Ersatz-)Darstellung von Unicode-Zeichen; d ist hexadezimale Ziffer (0-9 und a-f) gültiger Bezeichner: ab\u4711\u8a9fcd Bitte nur ASCII-Zeichen verwenden !!!!!!!!!!!!!

Grundlagen / Kommentare Zeilenkommentar: // Kommentar Bereichskommentar: /* Kommentar */ Dokumentationskommentar: /** Kommentar */ import java.io.*; // gibt „Hello world!“ aus public class World { public static void main(String[] args) { try { /* Ausgabe- befehl */ System.out.println(„Hello world!“); } catch (Exception e) { System.out.println(„Fehler!“); } } } Keine Schachtelung möglich!

Grundlagen / Token Token: lexikalische Einheiten Trennung von Token: Symbole: <, =, <=, ... Schlüsselwörter: while, if, ... Bezeichner: Prozedurnamen, Klassennamen, ... Literale: true, 23, 24.5f, „hello world“, ... Trennung von Token: Leerzeichen (Blank) Tabulator Zeilenende Zeilenvorschub Seitenvorschub „gefräßiger“ Tokenizer: Zusammenfassung möglichst vieler Zeichen

Grundlagen / Schlüsselwörter

Grundlagen / Bezeichner Benennung von deklarierten Einheiten und Labeln: Klassennamen Variablennamen Prozedurnamen ... Beginn mit Buchstabe, Unterstrich oder Dollar anschließend: Buchstaben, Ziffern, Unterstrich, Dollar, Unicode-Zeichen Grundlage: Unicode-Zeichensatz Katze Kätzchen abcdefghassasasasassasasasas Bitte nur ASCII-Zeichen verwenden!

Variablen und Ausdrücke / Motivation Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat. Notwendige Voraussetzungen: Gedächtnis ( Speicher) Zählen/Rechnen/Vergleichen ( Operationen) Programm: *1:„gefundene Anzahl ist 0“; while (vornFrei()) { vor(); while (kornDa()) { nimm(); *2:„erhöhe gefundene Anzahl um 1“; } while ( *3:„gefundene Anzahl größer als 0 ist“ ) { gib(); *4:„erniedrige gefundene Anzahl um 1“;

Variablen / Definition Notwendig für *1: Reservierung von Speicherplatz ( Variablendefinition) Festlegung eines Namens ( Variablendeklaration) Festlegung des Typs ( Datentypen) Initialisierung hier: int anzahl = 0; Variablendeklaration/-definition: Deklaration: Bekanntgabe eines Namens für den Speicherbereich an den Compiler Definition: Reservierung von Platz im Hauptspeicher Hauptspeicher Programm Daten „Gedächtnis“

Variablen / Definition <Variablendefinition> ::= <Datentyp> <Bezeichner> [„=“ <Ausdruck>] {„,“ <Bezeichner> [„=“ <Ausdruck>]} „;“ int anzahl = 0; long grosse_zahl = 1234567891234567L; float pi = 3.1415F; float noch_eine; char eins = `1`, zwei = `2`, drei = `3`; char neue_zeile = `\n`; String hello = „hello world!“; boolean wahr = true; int abcdefgh = 4711;

Variablen / Datentypen Daten haben unterschiedliche Eigenschaften: Ganze Zahlen: 2, 4711, -45, ... Reelle Zahlen: -3.4, -56.789678, -3.4e-10, 45.567e123, ... Buchstaben: `a`, `b`, ... Zeichenketten: „hello world!“, ... ... Unsinn: 3 + „hello“ Unterschiedliche Daten benötigen unterschiedlich viel Platz boolesche Werte: 1 Bit ASCII-Zeichen: 7 Bit Motivation für Datentypen: Überprüfung „sinnvoller“ Operationen Reservierung von „passendem“ Speicherplatz

Variablen / Datentypen Einfache Datentypen in Java: boolean entweder true oder false char 16-Bit-Unicode byte 8-Bit-Integer, vorzeichenbehaftetes 2er-Komplement short 16-Bit-Integer, vorzeichenbehaftetes 2er-Komplement int 32-Bit-Integer, vorzeichenbehaftetes 2er-Komplement long 64-Bit-Integer, vorzeichenbehaftetes 2er-Komplement float 32-Bit-Gleitkommazahl (IEEE 754-1985) double 64-Bit-Gleitkommazahl (IEEE 754-1985) Wertebereiche beschränkt: int: [-231 ... 231-1] int i = 2147483647; i = i + 1; i: -2147483648

Variablen / Datentypen Default Kleinster Wert Größter Wert boolean false N.A. N.A. char `\u0000` \u0000 \uFFFF byte 0 -128 127 short 0 -32768 32767 int 0 -2147483648 2147483647 long 0L -9223372036854775808 9223372036854775807 float 0.0F +-3.40282347E+38 +-1.40239846E-45 double 0.0 +-1.79769313486231570E+308 +-4.94065645841246544E-324

Variablen / Initialisierung Initialisierung von Variablen implizit durch Default-Werte explizit mit Hilfe von Literalen bzw. Ausdrücken Empfehlung: Variablen immer explizit initialisieren! Literale: Typspezifische Konstanten boolean: true, false int: Zeichenketten aus oktalen (führende 0): 035 dezimalen 29 hexadezimalen Ziffern (führendes 0x): 0x1D

Variablen / Initialisierung long: int-Literal mit nachgestelltem l oder L: 29L 4321l double: Dezimalzahlen mit Dezimalpunkt und optionalem Exponent: 18. 1.8e1 .18E-2 float: double-Literal mit nachgestelltem f oder F: 18.0f 1.8e1F char: Zeichen zwischen zwei Apostrophen: `a` `A` `2` oder Sonderzeichen mit Escape-Sequenz: `\n` `\“` `\\` Strings: Zeichen zwischen zwei Anführungszeichen: „hello\n world“

Ausdrücke / Motivation Notwendig für *2 , *3 und *4: Operationen ( Mathematik) Operatoren Operanden Sinn und Zweck: Berechnung neuer Werte aus alten Werten Beispiel: int anzahl = 0; anzahl = anzahl + 1; Operator Operand Operand

Ausdrücke / Definition Ausdruck: Verarbeitungsvorschrift, deren Ausführung einen Wert eines bestimmten Typs liefert entsteht, indem Operanden mit Operatoren verknüpft werden Operanden müssen typkonform sein! <Ausdruck> ::= <Literal> | <Variablenname> | <Funktionsaufruf> | „(“ <Ausdruck> „)“ | <unär-Op> <Ausdruck> | <Ausdruck> <binär-Op> <Ausdruck> | <Ausdruck> <ternär-Op1> <Ausdruck> <ternär-Op2> <Ausdruck>

Ausdrücke / Operatoren / Übersicht Integer-Arithmetik (int, short, long): +, -, *, /, % Gleitkomma-Arithmetik (float, double): +, -, *, / Boolesche Arithmetik (boolean): &&, ||, ! Vergleichsoperatoren: ==, !=, <, >, <=, >= Zuweisungsoperatoren: =, +=, -=, *=, /=, %= Inkrement-Operator: ++ Dekrement-Operator: -- Bit-Operatoren: <<, >>>, &, |, ~, ^, ... Spezielle Operatoren: ?:, (type)

Ausdrücke / Operatoren / integer-Arithmetik Operanden vom Typ int, short oder long gelieferter Wert vom Typ int, short bzw. long +: positives Vorzeichen +9876 -: negatives Vorzeichen -2345 +: Addition 12 + 98 (= 110) -: Subtraktion 12 - 98 (= -86) *: Multiplikation 6 * 5 (= 30) /: Ganzzahl-Division 7 / 3 (= 2) %: Restbildung (modulo) 7 % 3 (= 1)

Ausdrücke / Operatoren / Gleitkomma-Arithmetik Operanden vom Typ float oder double gelieferter Wert vom Typ float oder double +: positives Vorzeichen +45.67e3 -: negatives Vorzeichen -3.4e-5 +: Addition 1.2 + 9.8 (= 11.0) -: Subtraktion 1.2 - 9.8 (= -8.6) *: Multiplikation 6.1 * 5.0 (= 30.5) /: Ganzzahl-Division 9.0 / 2.0 (= 4.5) Rundungsfehler möglich!

Ausdrücke / Operatoren / boolesche Arithmetik Operanden vom Typ boolean gelieferter Wert vom Typ boolean &&: Konjunktion true && false (= false) ||: Disjunktion true || false (= true) !: Negation !true (= false)

Ausdrücke / Operatoren / Vergleiche Operanden vom Typ int, short , long,float, double oder char gelieferter Wert vom Typ boolean ==: Gleichheit 4 == 5 (= false) !=: Ungleichheit 6 != 7 (= true) <: Kleiner -2. < 0.1 (= true) <=: Kleiner-Gleich 3 <= 3 (= true) >: Größer `a` > `b` (= false) >=: Größer-Gleich 1 >= -1 (= true)

Ausdrücke / Operatoren / Zuweisung Operanden von beliebigem Typ gelieferter Wert vom Typ der Operanden <Zuweisung> ::= <Variablenname> „=“ <Ausdruck> „;“ int i = 0, j = -34; // Initialisierung i = 45; // Zuweisung i = i + 3; j = i = j + i*3; Abkürzungen: i++ i = i+1; i-- i = i-1; i += <expr> i = i + (<expr>) i -= <expr> i = i - (<expr>) i *= <expr> i = i * (<expr>) i /= <expr> i = i / (<expr>) i %= <expr> i = i % (<expr>)

Ausdrücke / Operatoren / Bedingungsoperator ternärer Operator erster Operand vom Typ boolean Operanden zwei und drei typkonform int i = 45, j = 46; int k = i<j ? i-1 : j+2; int k = 0; if (i<j) k = i-1; else k = j+2;

Ausdrücke / Operatoren / Typumwandlungen einige Typumwandlungen implizit: short int long float double arithmetisch Gleitkomma char int short s = 3; int i = s; long l = i = s; float f = 3.4F; double d = f * 2.3; float g = 3 + i; int b = `a`; ´z` - `a` ASCII-Repräsentation

Ausdrücke / Operatoren / Typumwandlungen Explizite Typumwandlung (Typcast): <Cast> ::= „(“ <Typ> „)“ double d = 7.99; int i = (int) d; // i == 7 int zahl = 33000; short s = (short)zahl; // Abschneiden der oberen Bits // s == -32536 Nicht alle Typumwandlungen sind erlaubt: int wahr = (int)true; // Fehler!!!

Ausdrücke / Operatoren / Präzedenz Liste mit absteigender Präzedenz: Postfix-Operatoren [], ., ++, -- unäre Operatoren +, -, ~, ! Erzeugung / Typumwandlung new, (type) Multiplikationsoperatoren *, /, % Additionsoperatoren +, - Gleichheitsoperatoren ==, != logische Und && logisches Oder || Bedingungsoperator ?: Zuweisungsoperatoren =, +=, *=, ... Abänderung der Präzedenz durch Klammernsetzung möglich!

Ausdrücke / Operatoren / Assoziativität wichtig bei Operatoren gleicher Präzedenz alle unären Operatoren sind rechts-assoziativ alle binären Operatoren außer den Zuweisungsoperatoren sind links-assoziativ Zuweisungsoperatoren sind rechts-assoziativ der ternäre Bedingungsoperator (?:) ist rechts-assoziativ Assoziativität ist von Bedeutung bei Funktionen mit Seiteneffekten! i = j *= k + 78; i = (j *= (k + 78)); i = j * k / 5; i = (j * k) / 5;

Ausdrücke / Operatoren / Auswertungsreihenfolge Operanden werden immer von links nach rechts ausgewertet werden wichtig bei Seiteneffekten! jeder Operand wird vor der Ausführung des Operators ausgewertet; Ausnahmen: &&, || und ?: p && q p ? q : false p || q p ? true : q o1 ? o2 : o3 werte o1 aus; falls true, werte o2 ansonsten o3 aus

Variablen und Ausdrücke / Zusammenfassung Motivation: Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat. Programm: int anzahl = 0; while (vornFrei()) { vor(); while (kornDa()) { nimm(); anzahl = anzahl + 1; } while ( anzahl > 0 ) { gib(); anzahl = anzahl -1;

Beispiele / Fakultät import java.io.*; public class Fakultaet { public static void main (String[] args) { int fak = 1; int n = 7; int zaehler = 1; while (zaehler <= n) { fak = fak * zaehler; zaehler = zaehler + 1; } System.out.println(fak); fak: n: zaehler:

Variablen und Ausdrücke / Beispiel import java.io.*; public class Fibonacci { public static void main (String[] args) { int lo = 1; int hi = 1; System.out.println(lo); while (hi < 20) { System.out.println(hi); hi = lo + hi; // neues hi lo = hi - lo; // neues lo (= altes hi) } lo: hi:

Erweiterung des Hamster-Modells Variablendefinition (int anzahl = 0;) neue Anweisung (lokale Variable) neue Definition (globale Variable) Zuweisung(en) (anzahl = 3;) arithmetische Ausdrücke (anzahl = anzahl + 1;) Erweiterung der booleschen Ausdrücke (anzahl > 0) Achtung: Der Gültigkeitsbereich einer Variablen beschränkt sich auf den Block, in dem die Variable definiert wurde! Im Falle einer Variablendefinition als Anweisung beginnt der Gültigkeitsbereich ab der Stelle der Definition! In dem Gültigkeitsbereich einer Variablen darf keine Variable gleichen Namens definiert werden!

Erweiterung des Hamster-Modells Aufgabe: Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat. Korrektes Programm mit globaler Variable anzahl: void sammle() { while (kornDa()) { nimm(); anzahl = anzahl + 1; } void legeAb() { while (anzahl > 0) { gib(); anzahl = anzahl - 1; int anzahl = 0; void main() { sammle(); while (vornFrei()) { vor(); } legeAb();

Erweiterung des Hamster-Modells Aufgabe: Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat. Fehlerhaftes Programm mit zwei lokalen Variablen anzahl: void sammle() { int anzahl = 0; while (kornDa()) { nimm(); anzahl = anzahl + 1; } } void legeAb() { int anzahl; while (anzahl > 0) { gib(); anzahl = anzahl - 1; void main() { sammle(); while (vornFrei()) { vor(); } legeAb();