Vorlesung Programmieren



Ähnliche Dokumente
Programmierkurs Java. Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Programmierkurs Java

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Programmierkurs Java

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Programmierkurs C++ Variablen und Datentypen

Programmieren. Besonderheiten von Java:

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Einführung in die C++ Programmierung für Ingenieure

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

5. Tutorium zu Programmieren

Diana Lange. Generative Gestaltung Operatoren

Vorkurs Informatik WiSe 15/16

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Java Einführung Operatoren Kapitel 2 und 3

C/C++ Programmierung

Programmierkurs C++ Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Tutorium Rechnerorganisation

Programmierkurs Java

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Erwin Grüner

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Programmierung in C. Grundlagen. Stefan Kallerhoff

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Primitive Datentypen

Modellierung und Programmierung 1

Einführung in die Programmierung

Die Programmiersprache C

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

IT-Basics 2. DI Gerhard Fließ

Klausur in Programmieren

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Java I Vorlesung Imperatives Programmieren

Entwurf von Algorithmen - Kontrollstrukturen

Computeranwendung und Programmierung (CuP)

Java Kurs für Anfänger Einheit 2 Datentypen und Operationen

Einführung in die Programmierung

Objektorientierte Programmierung

Dr. Monika Meiler. Inhalt

Kurze Einführung in die Programmiersprache C++ und in Root

Einführung in die Java- Programmierung

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Java-Programmierung mit NetBeans

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

25 kann ohne Rest durch 5 geteilt werden! ist wahr

Modul 122 VBA Scribt.docx

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Java Einführung Programmcode

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

GEONET Anleitung für Web-Autoren

Einführung in Javadoc

Übersicht Programmablaufsteuerung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

1. Der Einstieg in Java. Was heißt Programmieren?

Übungsblatt 3: Algorithmen in Java & Grammatiken

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Einführung in die C-Programmierung

Einführung in die Java- Programmierung

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

J.5 Die Java Virtual Machine

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Deklarationen in C. Prof. Dr. Margarita Esponda

Kontrollstrukturen, Strukturierte Programmierung

Programmierkurs Java

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Vorlesung Informatik II

1 Vom Problem zum Programm

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Java-Schulung Grundlagen

Programmiervorkurs Einführung in Java Tag 1

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Vorkurs Informatik WiSe 16/17

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Übungen Programmieren 1 Felix Rohrer. Übungen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Programmieren in Haskell Einführung

Angewandte Mathematik und Programmierung

Vorkurs Informatik WiSe 17/18

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Testen mit JUnit. Motivation

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Transkript:

Vorlesung Programmieren Java Grundlagen Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer

Überblick Motivation von Programmiersprachen Java: Historie und Besonderheiten Wesentliche Sprachelemente Variablen und elementare Datentypen Operatoren Ausdrücke Operatoren Kontrollstrukturen (Bedingte Ausführung, Wiederholungsanweisungen) Security - 04 Cryptology #2

Algorithmen, Maschinen- und Programmiersprachen Algorithmen kann man mit Programmiersprachen aufschreiben Maschinensprache genügt im Prinzip dafür Besteht nur aus Menge von Nullen und Einsen Für Menschen nur schwer verständlich Maschinenspezifisch, schwer auf andere Rechner zu portieren Schwer, in der Maschinensprache den Algorithmus zu sehen Deshalb: Höhere Programmiersprache Näher am menschlichen Denken Lassen sich vom Computer in Maschinencode umwandeln Programme in einer solchen Sprache heißen Quellcode, Programmcode, Source-Code oder einfach nur Source oder Code Es existieren hunderte verschiedener solcher Sprachen Welche man wählt, hängt vom Anwendungszweck ab Prinzipiell sind alle gleich mächtig (Turing vollständig)

Höhere Programmiersprache Sprache mit eigener Syntax und Semantik Syntax: Grammatikregeln der Sprache Walfische bereisen Indien, um Wolken zu klauen! Semantik: Bedeutung einzelner Worte und Satzzeichen der Sprache Der obige Satz ist syntaktisch korrekt aber sinnlos. Ziel: Sicheres Beherrschen beider Aspekte Compiler prüfen Syntax aber keine Semantik Security - 04 Cryptology #4

Warum Java? Besonderheiten von Java Sprache i. W. neu entworfen, nur wenige Altlasten Daher vergleichsweise einfach zu erlernen Write once, run everywhere Technische Realisierung: Programm Compiler Maschinencode Programm Compiler Interpreter Bytecode Maschinencode 5-5

Warum Java? Byte-Code statt Maschinensprache Maschinencode für eine virtuelle Maschine Kann auf jeder realen Maschine simuliert werden Ist ein solcher Simulator für einen Rechner verfügbar, dann kann jedes kompilierte Java-Programm ausgeführt werden Nachteil (Potenziell) langsamer als echter Maschinencode Inzwischen wurden sog. Just-in-Time-Compiler entwickelt, welche den Geschwindigkeitsnachteil in vielen Bereichen kompensieren 5-6

Geschichte von Java 1991 1993 J. Gosling et al. entwickeln Oak (Object Application Kernel) auf Basis von C++ Ziele: Plattform-Unabhängigkeit, Erweiterbarkeit der Systeme und Austauschbarkeit von Komponenten (ursprünglicher Einsatzbereich: Haushaltselektronik) Oak wird wegen rechtlicher Probleme in Java umbenannt. Zu diesem Namen wurden die Entwickler beim Kaffeetrinken inspiriert Java entwickelt sich durch Applet-Technologie zur Sprache des WWW Seit 1995 Sun bietet Java Development Kit (JDK) mit Compiler und Interpreter kostenlos an 2009 übernimmt Oracle Sun Microsystems 5-7

Warum Java? Typische Einsatzbereich für Java heute Applets: laufen direkt im Web-Browser Desktop-Anwendungen (J2SE) Web-Server Geschäftsanwendungen (Java EE) mit Servlets, JSF, JSP,... Handy-Anwendungen (J2ME, Android, ) Inzwischen sehr mächtig und performant! Vielzahl alternativer Sprachen für VM verfügbar (JRuby,...) Direkte Konkurrenz: Microsoft C# 5-8

Compiler und Laufzeitumgebung Java-Entwickler benötigt zwei wesentliche Komponenten Java-Compiler Virtual Maschine (auch genannt: Laufzeitumgebung ) Von Oracle kostenlos angeboten http://www.oracle.com/technetwork/java/javase/downloads/ Empfohlener Download JDK 7 ohne weiteres Zubehör (nicht nur das JRE) 5-9

Compiler und Laufzeitumgebung JDK enthält alle notwendigen Werkzeuge javac (Java Compiler) java (Virtual Machine, auch: VM) Und viele andere Tools (später) Schreiben von Java Programmen Programme (genauer: der Quellcode) werden im Text- Editor geschrieben Unix: vi, vim, nano, pico, nedit, emacs, Windows: edit, PSPad, UltraEdit, Scite, 5-10

Integrated Development Environment (IDE) Alternative zum Texteditor Integrieren Editor, Compiler und VM Beispiele: Eclipse, Netbeans, IntelliJ, Viele Zusatzfunktionen Syntax Highlighting Code Completion Debugger Refactoring Plug-Ins für Spezialanwendung... Für das Erlernen von Java nicht nur hilfreich Entscheiden Sie selbst, ab wann Sie eine IDE einsetzen Später: Große Übung über IDEs 5-11

Ein erstes Java-Programm Grundgerüst: Wird für jedes Java-Programm benötigt! Einrückung und Co.: Nur für Menschen zur einfacheren Lesbarkeit Programm-Name (muss mit Dateinamen übereinstimmen, inkl. Groß-/Kleinschreibung!) public class MeinProgramm { public static void main(string[] args){ System.out.println("42"); } } Anweisung zum Ausgeben von Text Ende einer Anweisung 5-12

Beispiel (Editieren, Compilieren, Ausführen) Editieren in beliebigem Editor vi MeinProgramm.java Groß- und Kleinschreibung wichtig (auch unter Windows) Kompilieren mit Java-Compiler javac javac MeinProgramm.java Erzeugt Datei MeinProgramm.class mit Bytecode-Instruktionen Ausführen mit Virtual Machine java java MeinProgramm Achtung: kein.java am Ende Groß- und Kleinschreibung beachten Security - 04 Cryptology #13

Ausgabe auf der Konsole Security - 04 Cryptology #14

Sprachmerkmale Java ist Turing-mächtig Es kann also alles berechnet werden Sofern genügend Speicher verfügbar ist Erforderliche Sprachmerkmale Elementare Rechenoperationen (Addition, Subtraktion,...) Sequenz (Hintereinander-Ausführung) Bedingte Ausführung (If-Anweisung) While-Anweisung

Erstes Sprachelement: Sequentielle Ausführung Markierung des Endes einer Anweisung durch Semikolon Zeichen ; a1; a2; a3; a4; Formatierung (für den Compiler) egal Für Menschen macht es Sinn, sich an gewisse Konventionen zu halten Security - 04 Cryptology #16

Lesbarer Code: Kommentare Kommentare einfügen damit Menschen Code besser verstehen können Werden vom Compiler ignoriert Zwei Varianten (in Java) // Kommentar 1-zeilig /* Kommentar potenziell über mehrere Zeilen */ Vorsicht: Verschachteln nicht erlaubt (/* /* */ */) Security - 04 Cryptology #17

Verarbeitung von Daten Programme verarbeiten Daten Werden gelesen und ausgegeben Notwendig: I/O-Funktionen (später) Zur Verarbeitung müssen diese im Arbeitsspeicher gehalten werden Programme müssen diese Daten referenzieren können Konzept der Variablen

Variablen Adresse Inhalt Eine Variable ist ein Speicherplatz Eine (Start-)Adresse im Arbeitsspeicher Programme verwenden Namen statt Adressen (z.b. jahr, i, hallo) Compiler bzw. Betriebssystem kümmert sich um konkrete Zuordnung...... 1001 12 1002 123 1003 7 1004 7 1007 9 1008 11 Größe des belegten Speichers bestimmt durch Datentyp 32-Bit Ganzzahl 8-Bit vorzeichenbehaftete Ganzzahl...... 800023 800024 4 800025......

Nächste Schritte Welche Datentypen gibt es in Java? Wie werden Variablen eines Typs deklariert? Welche elementaren Rechenoperationen (Operatoren) stellt Java bereit? Wie wird der Programmablauf gesteuert? (Schleifen, bedingte Anweisungen, usw.) 5-20

Datentypen

Primitive Datentypen in Java Datentyp Bemerkung Min Max byte 8 Bit, 2er-Komplement -128 +127 short 16 Bit, 2er-Komplement -32.768 +32.767 int 32 Bit, 2er-Komplement -2.147.483.648 +2.147.483.647 long 64 Bit, 2er-Komplement -9.223.372.036.854.775.808 +9.223.372.036.854.775.807 float double 32-bit IEEE 754 floating point 64-bit IEEE 754 floating point boolean Größe nicht spezifiziert false true char Ein 16-bit Unicode Zeichen '\u0000' (oder 0) '\uffff' (oder 65.535)

Primitive Datentypen in Java byte: The byte data type is an 8-bit signed two's complement integer. It has a minimum value of -128 and a maximum value of 127 (inclusive). The byte data type can be useful for saving memory in large arrays, where the memory savings actually matters. short: The short data type is a 16-bit signed two's complement integer. It has a minimum value of -32,768 and a maximum value of 32,767 (inclusive). int: The int data type is a 32-bit signed two's complement integer. It has a minimum value of -2,147,483,648 and a maximum value of 2,147,483,647 (inclusive). For integral values, this data type is generally the default choice unless there is a reason (like the above) to choose something else. long: The long data type is a 64-bit signed two's complement integer. It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive). Use this data type when you need a range of values wider than those provided by int. Quelle: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 5-23

Primitive Datentypen in Java float: The float data type is a single-precision 32-bit IEEE 754 floating point. This data type should never be used for precise values, such as currency. For that, you will need to use the java.math.bigdecimal class instead. Numbers and Strings covers BigDecimal and other useful classes provided by the Java platform. double: The double data type is a double-precision 64-bit IEEE 754 floating point. For decimal values, this data type is generally the default choice. As mentioned above, this data type should never be used for precise values, such as currency. Quelle: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 5-24

Primitive Datentypen in Java boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined. char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive). 5-25

Variablen und Variablendeklaration

Deklaration von Variablen Eine Variable ist ein Speicherplatz Repräsentiert einen Wert aus einem bestimmten Wertebereich Wertebereich durch verwendeten Datentyp festgelegt Speicherbereich wird über einen Namen referenziert Eine Variable wird deklariert (d.h. erzeugt) Syntax: <Typ> <Name>; Dadurch wird Speicher reserviert Beispiele int myint; char c1; boolean flag; short myshort, myshort2; mehrere Variablen gleichen Typs 5-27

Beispiel Was tut dieses Programm? Datei: Beispiele\08-Java-Grundlagen\2-Variablen\Variablen.java Security - 04 Cryptology #28

Was tut dieses Programm? Auf den ersten Blick: Nichts Zumindest erwartet es keine Eingabe Und es macht keine Ausgaben Es berechnet offensichtlich nichts Aber: es reserviert Speicher für Variablen Und gibt ihn sofort wieder frei Mit diesen Variablen könnten wir jetzt aber arbeiten Zwischenergebnisse und Ergebnisse von Berechnungen ablegen Diese Ergebnisse über den Namen der Variablen ansprechen Security - 04 Cryptology #29

Deklaration von Variablen: Identifier Wiederholung Deklaration: <Typ> <Name>; Der <Name> einer Variable ist ein Identifier Über diesen Identifier wird eine Variable eindeutig bezeichnet Es können nicht zwei Variablen den gleichen Identifier haben Zumindest nicht im gleichen Kontext (später) Identifier dürfen nur aus gewissen Zeichen bestehen Regeln für Identifier: nächste Folie Security - 04 Cryptology #30

Legale Identifier Bestehen aus Unicode Zeichen Nummern Währungssymbole Verbindungszeichen (Bsp.: Unterstrich _ ) Dürfen theoretisch beliebig lang sein Einschränkungen Muss mit Zeichen, Währungssymbol oder Verbindungszeichen starten Also auf keinen Fall mit einer Nummer Kein reserviertes Schlüsselwörter (class, public, etc.). Details unter http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html Keine Leerzeichen Identifier sind case-sensitive (Unterscheidung von Groß- und Kleinschreibung) Security - 04 Cryptology #31

Beispiele Legale Identifier Test Besteht nur aus Alphazeichen und ist daher korrekt. DAS_IST_TOTAL_TOLL Unterstriche sind erlaubt (auch am Anfang) bóolêáñ Gültige Unicode Zeichen DAGOBERT$$$$ Dollar-Zeichen ist ein gültiger Java- Buchstabe. $ Währungssymbole sind gültige Zeichen Ungültige Identifier 2good4u Erstes Zeichen muss ein Buchstabe sein und keine Ziffer das ist toll Leerzeichen sind nicht erlaubt Krass! Ausrufezeichen ist, wie viele Sonderzeichen, ungültig class Der Name ist schon von Java belegt (Class wäre ok) Security - 04 Cryptology #32

Datei: Beispiele\08-Java-Grundlagen\3-Identifier\Identifier.java Security - 04 Cryptology #33

Konventionen Normalerweise hält man sich auch an gewisse Konventionen Zum Beispiel an den sog. Java Code Style Java Code Style für Identifier (Kurzfassung) Klein beginnen und im Camel Case weiterschreiben Beispiel: einevariablemiteinemlangennamen Für internationale Zusammenarbeit Am besten auf ASCII beschränken (kein ä, ü, ß,...) Details unter http://www.oracle.com/technetwork/java/javase/documentation/codecon ventions-135099.html#367 Security - 04 Cryptology #34

Typsicherheit Alle Daten, die wir verarbeiten, sind immer von einem bestimmten Typ Typ der Werte, die wir einer Variablen zuweisen, muss dem Typ der Variablen entsprechen Alternativ müssen wir konvertieren (später) Kann man einen Wahrheitswert (boolean) eine int-zahl zuweisen (z.b. 123)? Nein, das dient der Sicherheit von Programmen Sog. statische Typsicherheit Diese wird vom Compiler überprüft Security - 04 Cryptology #35

Spezialfall von Deklarationen: Arrays Security - 04 Cryptology #36

Spezialfall: Arrays Beispiel: Wir benötigen zehn Integer-Variablen int i0, i1, i2, i3, i4, i5, i6, i7, i8 i9; Einfacher: Verwendung sog. Arrays int[] i = new int[10]; Zugriff über Indizes i[0], i[1],, i[9] Erster Index (0) Achtes Element an Index 7 0 1 2 3 4 5 6 7 8 9 5 66 777 338 1-56 4 0 1 4 Länge des Arrays: 10 5-37

Arrays: Beispiel der Deklaration Deklaration im Prinzip wie eine normale Variable gleichen Type Wo das [] steht (davor, danach) ist egal new int[10] reserviert Speicher für 10 int Variablen Bedeutung von new: später Security - 04 Cryptology #38

Größe / Länge eines Arrays In Java ist die Länge von Arrays abfragbar Komfortfeature von Java (nicht in allen Sprachen) arrayname.length (Variable vom Typ int) Beispiel: int i[] = new int[10]; int t[] = new int[20]; i.length ergibt 10 t.length ergibt 20 5-39

Literale Security - 04 Cryptology #40

Typsicherheit und Literale Daten sind immer von einem bestimmten Typ Das gilt auch für Literale Literale: Konstante Werte im Quelltext Manchmal auch Konstanten genannt Beispiele 10 01364545 0xA 9.81 true z Welchen Datentyp haben diese Literale? Security - 04 Cryptology #41

Datentypen von Literalen (Ganzzahlen) Ganzzahlige Typen (standardmäßig vom Typ int) 10 (Dezimal) 012 (Oktal, Basis 8, wegen führender Null) 0xA (Hexadezimal, Basis 16 wegen führendem 0x, Groß-/Kleinschreibung egal) 0b1010 (Binär, Basis 2, wegen führendem 0b) Suffix l oder L Datentyp long statt int Beispiel: 12273; 12733L; int i = 10; long l = 10L; Java7 erlaubt Underscores zur besseren Übersichtlichkeit Beispiele: 1012_1234_1_4, 0xFFFF_ABCD, 0b1111 0101

Datentypen von Literalen (Floating Point) Floating Point Werte sind standardmäßig vom Typ double Durch Anhängen von f wird ein Literal vom Typ float Optional kann ein d angehängt werden, um double explizit zu fordern Schreibweise von Floating Point Literalen Normale Schreibweise: 10.0 (alternativ: 10.) Normale Schreibweise: 0.1 (alternativ :.1) Eng. Schreibweise: 1E1 (entspricht 1 * 10 1 ) Float erzwingen: 10.0f Double erzwingen: 10.0d Security - 04 Cryptology #43

Datentypen von Literalen (Zeichen) Datentyp von Zeichen in Java: char In einfachen Anführungszeichen eingeschlossen (') Repräsentieren immer genau ein Zeichen Mehr als ein Zeichen nicht möglich (dafür spezieller Typ: String später) Beispiele: 'a' (das Zeichen a), 'ü' (das Zeichen ü) Manche Zeichen werden mit Backslash (\) escaped '\n' Zeilenumbruch '\'' Das Zeichen ' '\\' Das Zeichen \ selbst '\u00f1 Das Unicode-Zeichen mit der Nummer F1 16 (241 10 ): ñ Details unter: http://docs.oracle.com/javase/tutorial/java/data/characters.html

Beispiel Datei: Beispiele\08-Java-Grundlagen\4-Literale\Literale.java Security - 04 Cryptology #45

Operatoren Security - 04 Cryptology #46

Operatoren Was können wir nun mit Variablen und deren Werten anfangen? Werte zuweisen Werte vergleichen Werte addieren Werte subtrahieren usw. Geschieht über Operatoren Siehe auch http://download.oracle.com/j avase/tutorial/java/nutsandb olts/operators.html Operatortyp (sortiert nach Vorrang) Postfix expr++ expr-- Unär ++expr --expr +expr -expr ~! Multiplikativ * / % Additiv + - Shift << >> >>> Vergleich Gleichheit ==!= Bitweises AND Bitweises XOR Bitweises OR Logisches AND Logisches OR < > <= >= instanceof & ^ && Ternärer Operator? : Zuweisung = += -= *= /= %= &= ^= = <<= >>= >>>= 5-47

Operatoren Berechnen neuen Wert (Ergebnis hat bestimmten Datentyp) 1 + 1 Ergebnis 2, Datentyp int int i = 1; i = 2 * i; Zwei Operatoren (= und *) Ergebnis der Multiplikation: 2, Datentyp int; 2.0 * 1; Ergebnis: 2.0, Datentyp float 3/2; Ergebnis: 1, Datentyp int 5-48

Zuweisungsoperator (=) Funktion: Weist einer Variablen einen Wert zu Ergebnis der Berechnung der rechten Seite (RVALUE) wird der linken Seite (LVALUE der Variablen) zugewiesen Rechte Seite wird zuerst ausgewertet Wird die Variable rechts verwendet, so hat sie noch den alten Wert Beispiel int myint; myint = 10; myint = 12 * myint / 2; (entspricht 12 * 10 / 2 60) myint = 2 + 9; (entspricht 2+9 11) Abkürzung: Deklaration und Zuweisung in einem int myint = 10; 5-49

Zuweisungsoperator (=): Beispiele Beispiele (Deklaration + Zuweisung) char c = 'f'; byte b = 10; short s = 20; int i = 30; long l = 11111111111; float f = 10.001f; double d = 10.001d; boolean bo = false; Zuweisung bo = true; Ok bo = i; Fehler: int boolean geht nicht f = i; Ok (Safe Conversion, int float) i = f; Fehler: Verlust von Genauigkeit 5-50

Zuweisungsoperator (=): Beispiele Security - 04 Cryptology #51

Operatoren für Zahlenvergleiche == (gleich)!= (ungleich) > (größer) >= (größer oder gleich) < (kleiner) <= (kleiner oder gleich) Ergebnis Beispiel int i = 0; int j = 10; System.out.println( i == j ); System.out.println( j < 10 ); Ausgabe false false boolean-wert Werte: true oder false 5-52

Operatoren für Boolesche Ausdrücke &&! (und-verknüpfung) (oder-verknüpfung) (Negation) Geben jeweils einen boolean-wert zurück Beispiel System.out.println( ( (false && true)!(1==2) ) ); Ausgabe true 5-53

Operatoren für Zahlenarithmetik + (Addition) - (Subtraktion) * (Multiplikation) / (Division) % (Rest-Operator) Geben jeweils einen Zahlenwert zurück Beispiel System.out.println(3 + 9.5); // 12.5, double System.out.println(10 % 8); // 2, int 5-54

Weitere Operatoren für Zahlenarithmetik ++ (Inkrement) -- (Dekrement) Geben jeweils einen Zahlenwert zurück Nicht frei von Nebeneffekten Je in zwei Varianten verfügbar i++ (Post-Inkrement) i-- (Post-Dekrement) ++i (Prä-Inkrement) --i (Prä-Dekrement) int i = 3; i++; System.out.println(i); // "4" ++i; System.out.println(i); // "5" System.out.println(++i); //"6" System.out.println(i++); // "6" System.out.println(i); // "7" 5-55

Operatoren zur Typumwandlung Explizite Typumwandlung (Casting) Syntax: (Datentyp) Wert Gibt Wert (der Variablen/Konstante) im angegeben Datentyp zurück Java handhabt Datentypen sehr strikt Typkonvertierungen müssen explizit angeben werden Falsch int i = 3.5f * 6; // Rechter Ausdruck: Typ float int i = (int) 3.7f * 6; // Ergebnis: 3 * 6 = 18 Richtig int i = (int)(3.7f * 6); // Ergebnis: 3.5 * 6 = 22.2 22 5-56

Ausdrücke und Anweisungen Security - 04 Cryptology #57

Ausdruck (engl.: expression) Kann aus Operatoren, Variablen, Literalen und Funktionen (später) bestehen Berechnet einen Wert eines bestimmten Datentyps Beispiele 1 Wert: 1, Typ: int 1 + 2 Wert: 3, Typ: int 1 + 2.0 Wert 3.0, Typ: double 3.098 * 12.7 + 8 / 7.0 Wert 40.48...,Typ double (char) ( 'a' + 7 ) Wert h, Typ char Security - 04 Cryptology #58

Beispiel Datei: Beispiele\08-Java-Grundlagen\8-Ausdruecke\Ausdruecke.java Security - 04 Cryptology #59

Anweisungen (Statements) Anweisungen müssen (anders als Ausdrücke) keinen Wert zurückgeben Jeder Ausdruck ist auch eine Anweisung (Wert des Ausdrucks wird ignoriert) Mehrere Ausdrücke werden durch ; getrennt (sequentielle Ausführung) Beispiel: System.out.println( Hallo ); Gibt Hallo auf der Konsole aus, berechnet aber keinen Wert Spezielle Anweisung: Blockanweisung Gruppiert Menge von Anweisungen/Ausdrücken zu einer Anweisung Syntax: { <keine oder mehrere Anweisungen> } Beispiel: {} Beispiel: { int i=1+2; System.out.println( Hallo ); i=i*2; } Security - 04 Cryptology #60

Kontrollstrukturen Security - 04 Cryptology #61

Kontrollstrukturen Wichtig: bedingte Ausführung und Wiederholungsanweisung Java bietet mehrere Variante an Sind äquivalent und ineinander überführbar Sind jeweils eine Anweisung Bedingte Ausführung if switch Wiederholungsanweisung while do... while for Security - 04 Cryptology #62

Bedingte Ausführung: if Syntax: if (boolescher-ausdruck) anweisung; boolescher-ausdruck: Ausdruck, der zu boolean Wert evaluiert (true/false) Anweisung: Einzelne Anweisung (kann auch eine Blockanweisung sein) Beispiel für boolesche Ausdrücke true 1 > 2 i!= 12 u 2 > z - 3 Beispiele für if-anweisung if (true) System.out.println( Tautologie ); int i = 3; if (2 * i > 1000) i = i / 2; Security - 04 Cryptology #63

Fallstrick Beispiel: int i=3; if(2*i > 1000) i = i / 2; i = 3 * i; Auch wenn es optisch nicht so aussieht, aber: i = 3 * i ist nicht mehr Teil der if-anweisung Wird also IMMER ausgeführt, unabhängig vom Wert von boolescher-ausdruck Wichtig: Formatierung hat nichts mit Syntax zu tun Dennoch sollte man es optisch besser formatieren Besser: int i = 3; if(2 * i > 1000) i = i / 2; i = 3 * i; Aber: was wenn das gar nicht so gewollt ist? Security - 04 Cryptology #64

Fallstrick: Lösung: Blockanweisung Wenn i = 3 * i Teil der if-anweisung werden soll, hilft eine Blockanweisung int i = 3; if(2 * i > 1000) { i = i / 2; i = 3 * i; } Besser formatiert (Java Coding Style) int i = 3; if(2 * i > 1000) { i = i / 2; i = 3 * i; } Generell sinnvoll, Blockanweisungen zu benutzen z.b. falls man später noch eine Anweisung hinzufügt Security - 04 Cryptology #65

Variante der if-anweisung (if...then...else) Oft soll entweder das eine oder das andere gemacht werden if (a > 100) a = a 100; if (a <= 100) System.out.println( a zu klein ); Probleme Gleiche Bedingung muss zweimal formuliert werden (1 x positiv, 1x negativ) Wenn die erste Anweisung a modifiziert (wie hier geschehen), dann kommt es ggf. zu ungewolltem Verhalten Daher Variante if (boolescher-ausdruck) anweisung1; else anweisung2; Wenn boolescher-ausdruck true ist, dann wird anweisung1 ausgeführt, ansonsten anweisung2 if (a>100) a=a 100; else System.out.println( a zu klein ); Security - 04 Cryptology #66

Variante der if-anweisung (if...then...else) if (boolescher-ausdruck) anweisung1; else anweisung2; Beide Anweisungen können wieder beliebige Ausdrücke sein Also z.b. auch wieder if-anweisungen Beispiel: if(a>100) if(b>100) b=b+a; else a=a*2; Aber: zu welchem if gehört das else? Security - 04 Cryptology #67

Variante der if-anweisung (if...then...else) Lösung if (a > 100) if (b > 100) b = b + a; else a = a * 2; Wichtig: explizit machen, was gemeint ist Platzsparen muss nicht sein Lieber den Code besser lesbar machen Variante 1 if (a > 100) { if (b > 100) { b = b + a; } else { a = a * 2; } } Variante 2 if (a > 100) { if (b > 100) { b = b + a; } } else { a = a * 2; } Security - 04 Cryptology #68

if-anweisung: Weitere Beispiele Beispiel: if if (i > 12 ) { System.out.println("i ist größer als 12"); i = 123 * i 345; } Beispiel: if-then-else if (i > 12 ) { System.out.println("i ist größer als 12"); i = 0; } else { System.out.println("i ist kleiner oder gleich 12"); i++; } 5-69

Alternative zu if: switch-anweisung Nach case kann nur eine Konstante stehen, keine Variable Vorsicht: nicht das break vergessen Kann z.b. anstelle von langen if-else- Anweisungen verwendet werden Code wird dadurch kürzer und (evtl.) verständlicher Security - 04 Cryptology #70

Kontrollstrukturen: Wiederholung While-Schleife Wiederhole, solange Ausdruck wahr Syntax:while (boolescher-ausdruck) anweisung1; Beispiele while (i > 10) i--; while (i > 10) { System.out.println(i); i--; } 5-71

Kontrollstrukturen: Wiederholung Do-While-Schleife Wie while, jedoch mindestens einmal ausgeführt Syntax: do anweisung1; while(boolescher-ausdruck); Beispiele do i--; while (i > 10); do { System.out.println(i); i--; } while (i > 10); 5-72

Beispiel: while und do...while Security - 04 Cryptology #73

Kontrollstrukturen: Wiederholungen Abseits von while und do...while gibt es eine weitere Wiederholungsanweisung: for Ist wahrscheinlich die am meisten benutzte Variante while, do...while und for lassen sich ineinander überführen Welche Variante man nutzt ist daher egal Allerdings ist for expliziter als while/do-while und prägnanter Syntax for(<initialization>; <termination>; <increment>) statement; <initialization> Einmal zu Beginn der Schleife ausgeführt <termination> Abbruchbedingung (boolescher Ausdruck) <increment> Nach jedem Durchlauf ausgeführt 5-74

Kontrollstrukturen: Wiederholungen Beispiel: Wertebereich durchlaufen <initialization> int i = 0 Deklariert und Initialisiert Variable i <termination> i < 10 Abbruchbedingung <increment> i++ Erhöht Wert von i nach jedem Durchlauf Ablauf <initialization>(i: 0), <termination> (false), <statement>, <increment> (i: 1), <termination> (false), <statement>, <increment> (i: 2),..., <increment> (i: 10), <termination> (true) Ende Initialisierung Bedingung Modifikation for (int i = 0; i < 10; i++){ System.out.println(i); } 5-75

Kontrollstrukturen: Wiederholungen Beispiele: for-anweisung for (int i = 0; i < 100; i = i * i) System.out.println("i=" + i); for ( ; i < 10; --i); for (;;;); Endlosschleife 5-76

Demo: Größeres Java-Programm Ziel: Einlesen einer max. 20 Zeichen langen Zeichenfolge und Ausgabe in umgekehrter Reihenfolge Algorithmus Erzeuge einen Puffer für max. 20 Zeichen Lese ein Zeichen vom Keyboard ein Solange noch Platz im Puffer ist und nicht Enter gedrückt wurde Speichere Zeichen in nächsten freien Platz im Puffer Lese nächstes Zeichen vom Keyboard Setze Variable i auf Index des letzten Zeichens Solange i >= 0 ist Gebe Zeichen an Index i aus Dekrementiere i 5-77

Exkurs: Einlesen von Zeichen Bisher: Ausgabe auf der Konsole Zwei Ausgabe- Ströme : Standard (System.out) und Fehler (System.err) Trennen von echten Ausgabedaten und Fehlern Normal nicht unterscheidbar, können einzeln umgeleitet werden (siehe GUE Unix) Standardausgabe: System.out System.out.println( Hallo Welt ); Hallo Welt und beginnt neue Zeile System.out.print( Hallo Welt ); Hallo Welt (ohne neue Zeile zu beginnen) System.out.println(); Beginnt nur eine neue Zeile Fehlerausgabe: System.err System.err.println( Das sollte nicht passieren ); Security - 04 Cryptology #78

Beispiel: System.out und System.err Security - 04 Cryptology #79

Exkurs: Einlesen von Zeichen Wie liest man nun Zeichen von der Tastatur ein? Passendes Gegenstück: System.in Beispiel: Ein Zeichen von Tastatur lesen char c = (char) System.in.read(); Warum der Typ-Cast? Woher weiß man das? Umfangreiche Dokumentation von Java Sog. Javadoc http://docs.oracle.com/javase/7/docs/api/java/lang/system.html Security - 04 Cryptology #80

Fertiges Programm Security - 04 Cryptology #81

Security - 04 Cryptology #82

Zusammenfassung und Ausblick Mit den besprochenen Komponenten können bereits alle denkbaren Algorithmen in Java formuliert werden Restliche Magie des Programm-Grundgerüsts noch unklar Wird später nach und nach klarer Ergänzende Literatur http://download.oracle.com/javase/tutorial/java http://openbook.galileocomputing.de/javainsel 5-83