String-Konkatenation

Ähnliche Dokumente
Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

3. Anweisungen und Kontrollstrukturen

JAVA-Datentypen und deren Wertebereich

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Grundlagen der Programmierung

Einstieg in die Informatik mit Java

RO-Tutorien 3 / 6 / 12

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Schleifenanweisungen

Vorlesung Programmieren

2. Programmierung in C

Objektorientierte Programmierung

Welche Informatik-Kenntnisse bringen Sie mit?

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

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

5. Elementare Befehle und Struktogramme

Kapitel 3: Variablen

Die Programmiersprache C Eine Einführung

Programmieren in C / C++ Grundlagen C 2

Schleifen in C/C++/Java

Webbasierte Programmierung

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

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

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

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Einführung in die Programmierung

Primitive Datentypen

Softwareentwicklung Ausdrücke und Typkonversionen

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

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

Java Einführung Operatoren Kapitel 2 und 3

Grundlagen der Programmierung

Kapitel 5. Datentypen und Operatoren

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Tutorium Rechnerorganisation

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

L6. Operatoren und Ausdrücke

Kapitel 5. Programmierkurs. Kontrollstrukturen. Arten von Kontrollstrukturen. Kontrollstrukturen Die if-anweisung Die switch-anweisung

Primitive Datentypen und Felder (Arrays)

Programmieren in C/C++ und MATLAB

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

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

5.4 Klassen und Objekte

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean

4. Ablaufsteuerung (Kontrollstrukturen)

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

2.5 Programmstrukturen Entscheidung / Alternative

Präzedenz von Operatoren

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

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

4. Datentypen. Einleitung Eingebaute Datentypen. Konversion / Type-Cast. Operatoren. Übersicht Die Datentypen char, float und double Standardwerte

2.5 Primitive Datentypen

Werkzeuge zur Programmentwicklung

Operatoren und Ausdrücke

Annehmende Schleife do while

Modul 122 VBA Scribt.docx

Objektorientierte Programmierung OOP Programmieren mit Java

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent

C- Kurs 04 Anweisungen

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

BKTM - Programmieren leicht gemacht.

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Diana Lange. Generative Gestaltung Operatoren

Primitive Datentypen. Dr. Wolfgang Süß Thorsten Schlachter

2. Programmierung in C

Objektorientierte Programmierung OOP Programmieren mit Java

Tutorium für Fortgeschrittene

Algorithmen und ihre Programmierung

Flussdiagramm / Programmablaufplan (PAP)

MIKROPROZESSOR PROGRAMMIERUNG 8. VORLESUNG. LV-Nr SS INSTITUT FÜR ELEKTRONIK BIT

Ein erstes Java-Programm

3. Algorithmenentwurf und JAVA. Informatik II für Verkehrsingenieure

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Prinzipieller Grundaufbau eines einfachen C-Programmes

Teil IV. Grundlagen der Programmierung

Einfache Rechenstrukturen und Kontrollfluss II

Dr. Monika Meiler. Inhalt

Numerische Datentypen. Simon Weidmann

Fallunterscheidung: if-statement

2 Imperative Sprachkonzepte

Propädeutikum zur Programmierung

Informatik I Übung, Woche 40

Transkript:

YOU ARE HERE Ausdrücke und Anweisungen Einführung Objektorientierte Modellierung Java-Sprachkonstrukte Pakete und Zugriffskontrolle Deklaration von Methoden, Attributen, Variablen Ausdrücke und Anweisungen Kontrollstrukturen Ausnahmebehandlung Java-Klassenbibliothek Grafische Benutzungsoberflächen Programmierstil Zusammenfassung Ausdrücke sind mehrere durch Operatoren verknüpfte Variablen, Methoden oder Literale jeder Ausdruck hat ein Ergebnis (Wert) bestimmten Typs 5 * a + Math.max (b, c) (primitiver Typ) new java.util.date () (Referenztyp) in Anweisungen wird der Ausdruckswert einer Variablen zugewiesen, einer Methode übergeben oder als Methodenwert zurückgegeben d = 5 * a + Math.max (b, c); System.out.println (5 * a + Math.max (b, c)); return new java.util.date (); auch Deklarationen und Initialisierungen sind Anweisungen 1 2 Anweisungen und Blöcke Operatoren Anweisungen werden mit Semikolon (;) abgeschlossen leere Anweisung: einzelnes Semikolon ; // leere Anweisung Anweisungen werden der Reihe nach abgearbeitet Blöcke (begrenzt durch geschweifte Klammern) fassen Sequenzen von Anweisungen zusammen { Konkatenations-Operator + arithmetische Operatoren +, -, *, /, %, ++, -- Type Casting-Operator (typ) Bit-Operatoren ~, &,, ^, <<, >>, >>> Zuweisungsoperatoren =, +=, -=, *=, /=, %=, &=, =, ^= logische Operatoren!, &&, &,,, ^ Vergleichsoperatoren ==,!=, >, <, >=, <=, instanceof Bedingungsoperator?: 3 4 Operatorprioritäten String-Konkatenation 14 Stufen (hoch bis niedrig) ++, --, Vorzeichen, ~,!, (typ) *, /, % +, - <<, >>, >>> <, <=, >, >=, instanceof ==,!= & ^ &&?: = *=, /=, %=, -=, <<=, >>=, >>>=, &=, ^=, = Prioritäten können durch Klammerung geändert werden Operanden: Strings und ggf. primitive Datentypen Ergebnis: String Verknüpfung (Konkatenation) mit Operator + String a = "Hello", b = "World", c; c = a + " " + b; ist einer der Operanden ein primitiver Datentyp, so wird er in einen String umgewandelt String a = "Antwort: ", c; int b = 42; c = a + b; // "Antwort: 42" 5 6

Arithmetische Operatoren implizite Typumwandlung Operanden und Ergebnis: Zahlen Vorzeichen: +a bzw. a -a Rechenoperationen Addition, Subtraktion: a + b a - b Multiplikation, Division: a * b a / b Modulo-Division (Restbildung): a % b automatische Typanpassung (Type Casting) bei Rechenoperationen mit byte-, short-, int-zahlen: Ergebnis: int-zahl long- und anderen Ganzzahlen: Ergebnis: long-zahl float- und anderen Zahlen: Ergebnis: float-zahl double- und anderen Zahlen: Ergebnis: double-zahl Inkrementierung, Dekrementierung (nur für Ganzzahlen) Präinkrement, Prädekrement: ++a --a Postinkrement, Postdekrement: a++ a-- Präfix-Operatoren: erst Rechenoperation, dann Auswertung b = ++a; a = a + 1; b = a; Postfix-Operatoren: erst Auswertung, dann Rechenoperation b = a--; b = a; a = a - 1; Ziel: Vermeidung von Überläufen short a = 2, b = 30000; int c = a * b; // 60000 wäre zu groß für short Vorsicht bei Division von Ganzzahlen short a = 7, b = 2; int c = a / b; // ergibt 3! 7 8 explizite Typumwandlung Bit-Operatoren Type Casting-Operator: (typ) variable Vorsicht: Operator hat sehr hohe Priorität! ggf. Klammerung von zu castenden Ausdrücken notwendig short a = 2, b = 100, c; short a = 7, b = 2; c = (short) (a * b); float c = (float) a / b; Vorsicht: Datenverlust möglich! große in kleine Ganzzahlen: Verlust der höherwertigen Bits Fließkommazahlen in Ganzzahlen: Verlust der Nachkommastellen double d = -67.89; int i = (int) d; // -67 long-zahlen in Fließkommazahlen: u.u. nicht exakt möglich auch explizites Casting von Referenztypen möglich String-Umwandlungen über besondere Methoden (später) Operanden und Ergebnis: ganzzahlige primitive Datentypen bitweise Invertierung: ~a bitweise Verknüpfung bitweises Und: a & b bitweises Oder: a b bitweises Exclusiv-Oder: a ^ b bitweise Verschiebung (um n Stellen) nach links (mit Nachschieben von Nullen): a << n nach rechts (mit Nachschieben von Nullen): a >> n nach rechts (mit Nachschieben des Vorzeichenbits): a >>> n Trick zur Geschwindigkeitsoptimierung a << n entspricht a * 2 n a >>> n entspricht a / 2 n 9 10 Zuweisungsoperatoren Logische Operatoren für alle Datentypen als Ausdruck und Ergebnis: Zuweisungsoperator a = b Variable auf linker Seite erhält Wert des Ausdrucks auf rechter Seite Operanden: boolesche Ausdrücke Ergebnis: boolescher Wert für Zahlentypen als Operanden und als Ergebnis: Kombination von Rechen/Bitverknüpfungs-Operation mit Zuweisung Semantik (mit Operator-Platzhalter #) a #= b a = a # (b) Addition, Subtraktion: a += b a -= b Multiplikation, Division: a *= b a /= b Modulo-Division (Restbildung): a %= b Und: a &= b Oder: a = b Exclusiv-Oder: a ^= b logische Negation:!a mit Kurzschluss-Auswertung Auswertung der Operanden bricht ab, wenn Ergebnis feststeht logisches Und: a && b logisches Oder: a b ohne Kurzschluss-Auswertung Auswertung aller Operanden, auch wenn ohne Einfluss auf Ergebnis logisches Und: a & b logisches Oder: a b logisches Exclusiv-Oder: a ^ b 11 12

Vergleichsoperatoren Referenzgleichheit vs. Wertgleichheit Ergebnis immer boolescher Wert für alle Datentypen als Operanden: Gleichheit a == b Ungleichheit a!= b Vorsicht: Vergleich == nicht mit Zuweisung = verwechseln! für primitive Datentypen als Operanden: "größer als", "größer als oder gleich" a > b a >= b "kleiner als", "kleiner als oder gleich" a < b a <= b für Referenztypen und Klassen als Operanden: Prüfung des Datentyps a instanceof Typ ergibt true, wenn das Objekt a eine Instanz der Klasse Typ ist ergibt auch true, wenn Typ eine Oberklasse der Klasse von a ist Vorsicht beim Vergleich von Referenztypen! == prüft, ob Referenzen auf gleiche Instanz zeigen!= prüft, ob Referenzen auf verschiedene Instanzen zeigen es findet kein Vergleich der Objektinhalte statt! o!= p p == q o :Buch titel: Java p :Buch Konsequenzen Vergleich von Objektinhalten nur mit geeignet überschriebener equals-methode der Objekte möglich Vergleich von Zeichenketten nur mit entsprechenden Methoden der Klasse String möglich q titel: Java 13 14 Bedingte Ausdrücke Zusammenfassung Beschreibung von Alternativen in Ausdrücken "if-then- in einem Ausdruck" Syntax a = Bedingung? WennWahr : WennFalsch Bedingung muss ein Ausdruck mit booleschem Wert sein WennWahr und WennFalsch müssen Ausdrücke mit gleichem Ergebnistyp wie a sein (alle Datentypen erlaubt) Semantik Wenn Bedingung wahr ist, bekommt a den Wert von WennWahr, sonst den von WennFalsch zugewiesen Beispiel Erwachsene zahlen einen Mitgliedsbeitrag von 10, Jugendliche 5 mitgliedsbeitrag = alter >= 18? 10 : 5; Ausdrücke Anweisungen und Blöcke Operatoren Konkatenations-Operator + arithmetische Operatoren +, -, *, /, %, ++, -- Type Casting-Operator (typ) Bit-Operatoren ~, &,, ^, <<, >>, >>> Zuweisungsoperatoren =, +=, -=, *=, /=, %=, &=, =, ^= logische Operatoren!, &&, &,,, ^ Vergleichsoperatoren ==,!=, >, <, >=, <=, instanceof Bedingungsoperator?: implizite und explizite Typumwandlung Referenzgleichheit vs. Wertgleichheit 15 16 YOU ARE HERE Kontrollstrukturen Einführung Objektorientierte Modellierung Java-Sprachkonstrukte Pakete und Zugriffskontrolle Deklaration von Methoden, Attributen, Variablen Ausdrücke und Anweisungen Kontrollstrukturen Ausnahmebehandlung Java-Klassenbibliothek Grafische Benutzungsoberflächen Programmierstil Zusammenfassung Anweisungen werden normalerweise nacheinander abgearbeitet Bearbeitungsreihenfolge von Anweisungen und Blöcken kann durch Kontrollstrukturen beeinflusst werden bedingte Verzweigungen (if-) bewachte Anweisungen (switch) Schleifen (for, while, do-while) 17 18

Bedingte Verzweigung Auswahl aus zwei Alternativen und davon abhängige Programmfortsetzung if (Bedingung) Anweisung1; Anweisung2; Bedingung muss ein Ausdruck mit booleschem Wert sein Anweisung1 wird ausgeführt, wenn Bedingung true ist Anweisung2 wird ausgeführt, wenn Bedingung false ist -Teil ist optional wenn Bedingung false ist, wird die if-anweisung verlassen if-anweisung: Beispiel mehrere Anweisungen lassen sich in Blöcken gruppieren if (laendercode == 'D') { // Versand innerhalb Deutschlands summe += VERSANDKOSTEN_INLAND; System.out.println ("Bestellsumme: EUR " + summe); { // Versand ins Ausland System.out.println ("Order Total: EUR " + summe); Unterschied zu?:-operator mehrere Anweisungen im if- und -Zweig möglich if- und -Zweig sind hier keine Ausdrücke gleichen Werts, sondern Anweisungen bzw. Blöcke mehrerer Anweisungen 19 20 Bedingte Verzweigungen sind selbst auch Anweisungen lassen sich als Anweisungen in if- oder -Zweig einschachteln if (laendercode == 'D') summe += VERSANDKOSTEN_INLAND; Vorsicht: Weglassen von -Zweigen kann bei Verschachtelung Missverständnisse auslösen! if (laendercode == 'D') bezieht sich immer auf das nächstliegende vorhergehende if, zu dem noch kein definiert wurde Wo liegt der semantische Fehler im Beispiel? 21 22 Compiler richtet sich nicht nach der Einrückung, sondern nach der Reihenfolge der if/-zweige: Vermeidung des Fehlers durch Einklammerung in Blöcke ({ ) oder Verwendung von leeren Anweisungen (;): if (laendercode == 'D') if (laendercode == 'D') { ; Vorsicht: Code an sich fehlerfrei (syntaktisch korrekt), verhält sich aber nicht wie beabsichtigt (semantisch falsch) semantische Fehler können vom Compiler nicht erkannt werden! 23 24

Bewachte Anweisungen: Motivation Beispiel: Währungsumrechnung im Online-Shop wenn Warenversand nach Island: Summe in ISK ausgeben wenn Warenversand nach Hong Kong: Summe in HK$ ausgeben wenn Warenversand nach Japan: Summe in Yen ausgeben ansonsten: Summe in Euro ausgeben mögliche Realisierung (naiv): verschachtelte if-anweisungen Bewachte Anweisungen: Motivation if (laendercode == 'I') { summe *= 838.536390; waehrung = "ISK"; if (laendercode == 'H') { summe *= 8.300476; waehrung = "HK$"; if (laendercode == 'J') { summe *= 128.501118; waehrung = "YEN"; waehrung = "EUR"; System.out.println ("Summe: " + waehrung + summe); unübersichtlich und fehleranfällig! 25 26 switch-anweisung switch-anweisung: Beispiel übersichtlichere und mächtigere Lösung Ausdruck wird ausgewertet und Wert mit Konstanten verglichen Anweisungen ab case-marke mit "passender" Konstante werden ausgeführt wenn keine Konstante "passt", werden Anweisungen ab default-marke ausgeführt bei break fährt Programm nach der switch-anweisung fort switch (Ausdruck) { case Konstante1: case Konstante2: case KonstanteN: default: switch (laendercode) { case 'I': // Island summe *= 838.536390; waehrung = "ISK"; case 'H': // Hong Kong summe *= 8.300476; waehrung = "HK$"; case 'J': // Japan summe *= 128.501118; waehrung = "YEN"; default: // andere Laender waehrung = "EUR"; System.out.println ("Summe: " + waehrung + summe); 27 28 switch-anweisung: Regeln switch-anweisung: Beispiel 2 Ausdruck muss vom Typ short, byte, int oder char sein Konstanten müssen vom gleichen Typ wie Ausdruck sein Beispiel: Für Lieferungen nach Schottland und England soll in britische umgerechnet werden default-zweig ist optional default- und case-zweige dürfen leer sein Vorsicht: Wenn ein case-zweig nicht mit break endet, wird mit der Ausführung des nächsten Zweigs fortgefahren! switch (Ausdruck) { case Konstante1: case Konstante2: case Konstante3: // kein break! case Konstante4: switch (laendercode) { case 'I': // Island summe *= 838.536390; waehrung = "ISK"; case 'S': // Schottland case 'E': // England summe *= 0.675636; waehrung = "GBP"; default: waehrung = "EUR"; System.out.println ("Summe: " + waehrung + summe); 29 30

Schleifen while-schleife mehrfaches Durchlaufen der gleichen Anweisung oder des gleichen Anweisungsblocks Zahl der Durchläufe wird von Laufbedingung bestimmt while (Bedingung) { Bedingungsschleife while-schleife do-while-schleife Bedingung muss ein boolescher Ausdruck sein solange Bedingung true ist, werden Anweisung(en) ausgeführt Zählschleife for-schleife Beachte: erster Test der Bedingung vor Ausführung der Anweisung wenn Bedingung beim ersten Mal nicht erfüllt, werden Anweisungen überhaupt nicht ausgeführt! 31 32 while-schleife: Beispiele do-while while-schleife Beispiel: Thermostat while (hoersaal.gettemperatur < 20) { hoersaal.heizen; do { while (Bedingung); wenn Temperatur schon >= 20, wird gar nicht erst geheizt Beispiel: Zählen Bedingung muss ein boolescher Ausdruck sein solange Bedingung true ist, werden Anweisung(en) ausgeführt int n = 0; while (n < 10) { System.out.println (n); n++; Beachte: erster Test der Bedingung nach einmaliger Ausführung der Anweisung Schleife wird grundsätzlich mindestens einmal durchlaufen! 33 34 do-while while-schleife: Beispiele for-schleife Beispiel: Eingabe einer positiven Zahl do { System.out.println ("n? "); n = IOTools.readInteger(); while (n < 0); for (Initialisierung; Bedingung; Schleifenfortschaltung) { Eingabe wird abgefragt, bis eine Zahl >= 0 eingegeben wurde Beispiel: Zählen Initialisierung komma-getrennte Liste von Ausdrücken einmalig vor Beginn der Schleifenbearbeitung ausgewertet typischerweise Initialisierung von Zählvariablen int n = 0; do { System.out.println (n); n++; while (n < 10); Bedingung boolescher Ausdruck wenn Bedingung true ist, werden Anweisungen ausgeführt ansonsten wird die Schleife abgebrochen 35 36

for-schleife for (Initialisierung; Bedingung; Schleifenfortschaltung) { Schleifenfortschaltung komma-getrennte Liste von Ausdrücken immer nach den Anweisungen im Schleifenrumpf ausgeführt typischerweise Weiterschaltung von Zählvariablen Anweisungen Schleifenrumpf, der wiederholt werden soll for-schleife: Bearbeitungsreihenfolge for (Initialisierung; Bedingung; Schleifenfortschaltung) { 1. Ausführen der Initialisierung 2. Prüfen der Bedingung 3. wenn true, Ausführen der Anweisungen, sonst Abbruch 4. Ausführen der Schleifenfortschaltung 5. weiter mit 2. alle Teile sind optional 37 38 for-schleife: Beispiele Zusammenfassung Beispiel: Zählen for (int n = 0; n < 10; n++) { System.out.println (n); Beispiel: mehrere Initialisierungen, Fortschaltungen bedingte Verzweigungen (if-) zwei Alternativen der Programmfortsetzung in Abhängigkeit von einer booleschen Bedingung bewachte Anweisungen (switch-case-default) mehrere Alternativen der Programmfortsetzung in Abhängigkeit vom Wert einer Ganzzahl- oder Zeichenvariable for (int n = 0, m = 10; n < 10; n++, m--) { System.out.println ("n=" + n); System.out.println ("m=" + m); Beispiel: Endlosschleife for ( ; ; ) { System.out.println ("Und täglich grüßt das Murmeltier"); while-schleife abhängig von boolescher Bedingung (vor Ausführung getestet) do-while-schleife abhängig von boolescher Bedingung (nach Ausführung getestet) for-schleife abhängig von Zählvariablen, die im Schleifenkopf initialisiert, getestet und fortgeschaltet werden 39 40 Und täglich grüßt das Murmeltier morgen um 9:15 Uhr im Hörsaal Süd, Campus Jahnallee! 41