252-0027 Einführung indie Programmierung 2.1Methoden ThomasR.Gross DepartmentInformatik ETHZürich Uebersicht § 2.0Einfache JavaProgramme § 2.1Methoden § Struktur § 2.2Typen undVariable § Einfache (eingebaute)Typen § Deklaration vonVariablen 2 Zusammenfassung public class name { class: ein Programm mit Namen public static void main(String[] args) { statement; statement; ... statement; method: Gruppe von Anweisungen mit Namen main } } statement: Anweisung die ausgeführt werden soll 3 § Jedes (ausführbare)JavaProgramm besteht aus einer Klasse (class) § dieeine Methode main enthält, § dieeine Reihe vonAnweisungen enthält § Später arbeiten wir mit Programmen mit mehreren Klassen 4 println(),println(“Hello”) § Gross/Kleinschreibung wird unterschiedlich behandelt public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); System.out.println(); System.out.println("Hello World!"); } } Output: Hello World! Hello World! 5 Namen undBezeichner § Jedes Programm braucht einen Namen public class HelloWorld { § Konvention:fängt mit Grossbuchstaben an § Konvention:Grossbuchstaben zur verbesserten Lesbarkeit § Regel:Dateiname gleich Programmname HelloWorld.java § Gross/Kleinbuchstaben sind (inJava)unterschiedlich 6 § Bezeichner:Namefür ein Programmelement § Mussmit einem Buchstaben (grossoder klein)anfangen § oder mit _(Unterstrich,“underscore”)oder mit “$”(Dollarzeichen) § danach Ziffern oder obige Zeichen § Konvention:Methodenname Kleinbuchstaben 7 Reservierte Symbole § keyword:Ein Bezeichner (“identifier”)derreserviert ist (weil er für dieSprache eine besondere Bedeutung hat) abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while 8 Kommentare Kommentare (“comments”)sind Notizen im Programmtext,die einem Leser beim Verstehen desProgrammes helfen (sollen) § Leser:kann auch der Authorsein § Kommentare werden nicht ausgeführt,haben keinen Einfluss auf Programm § 2Varianten § // Text bis zum Ende der Zeile § /* Text bis zum naechsten */ 9 Wo sollten Kommentare stehen § Anfang desProgramms § Zweck § Algorithmus § Author § Anfang jeder Methode § Darüber später mehr § Für Codedernicht sofort verständlich ist § Kommentare wichtig für grosse Projekte,Programme mit mehreren Authoren,Programme diesich oftändern 10 Beispiel /* * Author: Ein Student; Herbst 2017, Uebung 1 * Entwurf uebernommen von einer Assistentin */ public class HelloWorld { public static void main(String[] args) { } System.out.println("Hello World!"); } // end main // end HelloWorld 11 Strings § String:eine Folge vonZeichen (“characters”)eingeschlossen in “und“ § “hello” § “Hello” § “3+2” § Einschränkungen: § Nur eine Zeile lang “Das ist kein Java String” § Darf nicht “enthalten (“So etwas “geht” nicht”) 12 Sonderzeichen § Undwasmachen wir wenn wir ein “ausgeben wollen? § Esgibt sogenannte Ersatzdarstellungen (“escapesequences”) mit denen ein Sonderzeichen ausgedrückt werden kann § Fangen alle mit \ (Rückwärtsschrägstrich) (“backslash”)an \t Tabcharacter \n Neue Zeile (newlinecharacter) \" Quotationmark(doublequote)character \\ Backslashcharacter 13 Beispiele § Beispiel: System.out.println(“\\Hallo\nWie\tgeht es \”Ihnen\”?\\\\"); § Output: \Hallo Wie geht es ”Ihnen"?\\ 15 Fragen § Wasdrucken diese println Statements? System.out.println("\ta\tb\tc"); System.out.println("\\\\"); System.out.println("'"); System.out.println("\"\"\""); System.out.println("C:\neuer Spor\t Wagen"); § Welchesprintln Statementdruckt diesenString? / \ // \\ /// \\\ 16 Antwort § Outputjedes println Statements: a \\ ' """ C: euer Spor b c Wagen 17 Antwort § println Statementumdiegewünschte Zeile Outputzu erzeugen : System.out.println("/ \\ // \\\\ /// \\\\\\"); 18 2.1Methoden § Beispiel:main im ProgramHelloWorld 19 Methoden § Methode:Sequenz vonAnweisungen mit einem Namen (dem derMethode) § Methoden strukturieren dieAnweisungen § Anstatt alle Anweisungen ineiner Methode (main)unterzubringen § Methoden erlauben es,Wiederholungen zu vermeiden § Eine (neue)Methode stellt eine neue Anweisung zur Verfügung 22 staticmethods § staticmethods:Methode mit weiteren Eigenschaften § main ist eine staticmethod(Keywordstatic vor Name) § mainwird automatisch aufgerufen § Wir erklären gleich wie andere Methoden aufgerufen werden 23 (Zu)Einfaches Beispiel public class PrintExample1 { public static void main(String[] args) { System.out.println("\n--------\n"); System.out.println("Warnung: sichern Sie die Daten\n"); System.out.println("\n--------\n"); System.out.println("Lange Erklaerung"); System.out.println("\n--------\n"); System.out.println("Warnung: sichern Sie die Daten\n"); System.out.println("\n--------\n"); } } // main 24 Output -------Warnung: sichern Sie die Daten -------Lange Erklaerung -------Warnung: sichern Sie die Daten -------- 25 Wie entstehen Methoden? § Entwickeln desAlgorithmus § Lösung desProblems § Aufteilung inTeil-Probleme § Deklaration desAlgorithmus (aufschreiben,codieren) § Ausführen (aufrufen,“call”, “invoke”)derMethode(n) class method main n statement n statement n statement method one n statement n statement method two n statement n statement n statement 26 Wie entstehen Methoden? § Entwickeln desAlgorithmus § Lösung desProblems § Aufteilung inTeil-Probleme § Deklaration desAlgorithmus (aufschreiben,codieren) § Ausführen (aufrufen,“call”, “invoke”)derMethode(n) class method main n one n statement n two method two n statement n statement method three n statement n statement n statement 28 (Zu)Einfaches Beispiel public class PrintExample2 { public static void main(String[] args) { warning(); System.out.println("Lange Erklaerung"); warning(); } // main public static void warning() { System.out.println("\n--------\n"); System.out.println("Warnung: sichern Sie die Daten\n"); System.out.println("\n--------\n"); } } 29 Aufruf einer Methode § Syntax: name(); § Mehrfaches Aufrufen ist zulässig methodinvocation ⟸ bezeichner (); § Beispiel: printWarning(); printWarning(); 30 Aufruf einer Methode § Wenn dieAnweisung (für dieMethode name) name(); // naechste Anweisung stmt ausgeführt wird,dann wird dieMethode name aufgerufen ("invoked","called") § Damit beginnt dieAusführung derMethode name. § Es gibt auch andere Wege,eine Ausführung zu starten,aber diese interessieren uns (noch)nicht. § Wenn name fertig ist,geht es mit stmt weiter 31 Ausführung einer Methode § Methode name wird aufgerufen § 1.Anweisung ausgeführt § Gibt es weitere Anweisungen? § Nein:Ende derAusführung vonname § Ja: § Nächste Anweisung ausgeführt § Wir bezeichnen dieAbfolge derAusführung vonAnweisungen als Kontrolfluss (“controlflow”) § geradliniger Kontrollfluss:dieausgeführten Anweisungen folgen im Programm aufeinander § InJava:Anweisungsreihefolge ist explizit 32 Kontrollfluss bei Methodenaufruf § Wenn eine Methode aufgerufen wird,dann § ”springt”dieAusführung zur Methode undführt dieAnweisungen der Methode aus unddanach § ”springt"dieAusführung wieder zu dem Ortzurück vondem der Aufruf erfolgte § Undes geht weiter mit dernächsten Anweisung § Anordnung der Methoden im Programm(text)ohne Bedeutung Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); Hier geht es System.out.println("Ende von \"main\" "); weiter } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); Hier geht es } // message2 weiter } Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); Hier geht es } // main weiter public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Methoden dieMethoden aufrufen public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Ende von \"main\" "); } // main public static void message1() { System.out.println("Nachricht 1: Fertig"); } // message1 } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2 Output § Nachricht 1: Fertig § Die 2. Nachricht: § Nachricht 1: Fertig § Ende von Nachricht 2 § Ende von "main" 50 public class MethodsExample { Kontrollfluss public static void main(String[] args) { message1(); public static void message1() { System.out.println("Nachricht 1: Fertig"); } message2(); public static void message2() { System.out.println(" Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); System.out.println("Done with main."); } } ... } public static void message1() { System.out.println("Nachricht 1: Fertig"); } Einfaches Beispiel (Wir verwenden jetzt println weil es einfach ist.Spätere Java Programme benutzen eine andere Schnittstelle für Benutzer) 52 Beispiel mit staticmethods Schreiben Sie ein Programm umdiese Figuren zu drucken / \ / ______ \ \______/ \ \ / / \______/ +--------+ / | \ / ______ \ STOP \______/ / ______ \ \ | / / \ +--------+ Entwicklungsschritte ______ / \ / \ \ / Version1:(ohne Ausnutzen der Struktur) \______/ \ / \______/ +--------+ n n ______ / / | \ \ \ | / STOP \______/ ______ / \ / \ +--------+ n Erstellen Sie ein Programm mit leerer main Methode. Kopieren Sie denerwünschten Outputinmain und schreiben für jede Zeile eine entsprechende System.out.println Anweisung. Führen Sie dieMethode aus umdenOutputmit der gewünschten Figur zu vergleichen ProgramVersion1 public class Figures1 { public static void main(String[] args) { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("\\ /"); System.out.println("/ System.out.println("| System.out.println(" System.out.println(" \\______/"); System.out.println("/ System.out.println(); \\"); ______"); System.out.println(" / System.out.println("+--------+"); System.out.println(" / /"); System.out.println(); /"); ______"); |"); System.out.println(" \\______/"); System.out.println(); System.out.println(" STOP System.out.println("\\ System.out.println(" \\______/"); System.out.println("\\ \\"); \\"); \\"); System.out.println("+--------+"); } // main } // Figures1 Entwicklungsschritte ______ / \ / \ \ / Version2:(mit Ausnutzen der Struktur,mit Redundanz) \______/ \ / \______/ +--------+ n n ______ / / | \ \ \ | / STOP \______/ ______ / \ / \ +--------+ n Identifizieren Sie (eventuell vorhandene)Strukture(n). Unterteilen Sie diemain Methode basierend aufIhrer Strukturierung. Führen Sie dieMethode aus umdenOutputmit der gewünschten Figur zu vergleichen Struktur desOutput ______ / \ / \ \ / \______/ \ / \______/ +--------+ ______ / / | \ \ \ | / STOP \______/ ______ / Strukturen indieser Figur n oben:Sechseck (Hexagon)(oder Ball…) n darunter:”Wanne”(oder Suppentasse …) n drittens ”STOPSchild"Figur n viertens ”Trapez"(oder HutFigur …) \ / \ +--------+ Struktur à Methoden : n hexagon n wanne n stopSign n hut ProgramVersion2 public class Figures2 { public static void main(String[] args) { hexagon(); wanne(); stopSign(); hut(); } //main ... ProgramVersion2,Fortsetzung ... public static void hexagon() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println(); } public static void wanne() { System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println("+--------+"); System.out.println(); } ... ProgramVersion2,Fortsetzung ... public static void stopSign() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("| STOP |"); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println(); } } public static void hut() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("+--------+"); } //Figures2 Entwicklungsschritte ______ / \ / \ \ / \______/ \ Version3(mit Ausnutzen derStruktur,ohne Redundanz) n / \______/ +--------+ n ______ / / | \ \ \ | / STOP \______/ \ / \ +--------+ Erstellen Sie Methoden um(soweit möglich)Redundanz zu vermeiden n Kommentieren Sie denCode n Führen Sie dieMethode aus ______ / Identifizieren Sie (eventuell vorhandene)Strukture(n)und Redundanz 61 Redundanz im Output ______ / \ / \ \ / n / n \______/ \ \______/ +--------+ n ______ / / | \ \ \ | / STOP \______/ ______ / \ / \ +--------+ n Hexagonoberer Teil:im StopSchild undHut wiederverwendet Hexagonunterer Teil:inWanne undStopSchild Trennlinie:inWanne undHut Diese Redundanz kann durch diese Methoden ausgenutzt (d.h.eliminiert)werden: n hexagonTop n hexagonBottom n line 62 ProgramVersion3 // Ihr Name, 252-0027, Herbst 2020 // Prints several figures, with methods for structure and redundancy. public class Figures3 { public static void main(String[] args) { hexagon(); wanne(); stopSign(); hut(); } // Draws the top half of an an hexagon. public static void hexagonTop() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); } ... ProgramVersion3,Fortsetzung ... // Draws the bottom half of an hexagon. public static void hexagonBottom() { System.out.println("\\ /"); System.out.println(" \\______/"); } // Draws a complete hexagon. public static void hexagon() { hexagonTop(); hexagonBottom(); System.out.println(); } ... ProgramVersion3,Fortsetzung ... // Draws a tub (“Wanne”) figure. public static void wanne() { hexagonBottom(); line(); System.out.println(); } // Draws a stop sign figure. public static void stopSign() { hexagonTop(); System.out.println("| STOP hexagonBottom(); System.out.println(); } |"); ProgramVersion3,Fortsetzung ... // Draws a figure that looks sort of like a hat (“Hut”). public static void hut() { hexagonTop(); line(); } // Draws a line of dashes. public static void line() { System.out.println("+--------+"); } } //Figures3 Typen undVariable 67 Typen § Typen (“types”)beschreiben Eigenschaften vonDaten § Ein Typ beschreibt eine Menge (oder Kategorie)vonDaten Werten. § Bestimmt (beschränkt)dieOperationen,diemit diesen Daten gemacht werden können § Viele Programmiersprachen erfordern dieAngabe (Spezifikation)von Typen § Typen Beispiele:ganze Zahlen,reelle Zahlen,Strings § Typen sind Teil derDokumentation (wasverarbeitet diese Methode?) Typen § DieProgrammiersprache legt fest,wie ein Typ implementiert ist § DieinterneDarstellung eines Typesberuht aufKombinationen von1sund0s 104 "hi" à 01101000 à 0110100001101001 Typen § DieProgrammiersprache legt fest,wie ein Typ implementiert ist § DieinterneDarstellung eines Typesberuht aufKombinationen von1sund0s 104 "hi" à 01101000 à 01101000 01101001 ASCIITabelle 104 01101000 105 01101001 h i Wer definiert Typen? § Verlangen alle Programmiersprachen dieSpezifikation von Typen? § Nein.(Mit manchmal überraschenden Folgen) § Javaverlangt dieSpezifikation. § Welche Typen kann ein JavaProgramm verwenden? § Typen dieinderSprache definiert sind:eingebaute Typen (“primitive types”,integrierte Typen)– Beispiel:ganze Zahlen § Typen aus Bibliotheken,dieimmer verfügbar sind (z.B.Strings) § Benutzer-definierte Typen 71 Eingebaute Typen inJava § Integrierte Typen (“primitivetypes”):8einfache Typen für Zahlen,Text,etc. Name Beschreibung Beispiele § int ganze Zahlen 42,-3,0,926394 § double reelle Zahlen 3.1,-0.25,9.4e3 § char (einzelne)Buchstaben 'a','X','?','\n' § boolean Logische Werte true,false Warum Typen § Programme manipulieren Symbole § Beispiel EBNF:Symbole aus Zeichen aus einer Menge (”Alphabet”) § Legaloder nicht § Programme übersetzen Sprachen,spielen Schach ,berechnen die Steuerschuld § Symbole werden verknüpft,verglichen,geändert,gelesen,…. § Typen verhindern Fehler § Kann nicht dieAHVNummer zum Gehalt addieren § Kann nicht Volumen undFläche addieren 73 Ausdrücke (“Expressions”) § Ausdruck (“expression”):Ein Wertoder eine Operationdie einen Wertberechnet • Beispiele: 1 + 4 * 5 (7 + 2) * 6 / 3 42 § Dereinfachste Ausdruck ist ein Literal (“literalvalue”). § Komplexe Ausdrücke können Operatoren undKlammern enthalten Arithmetische Operatoren § Operator:Verknüpft mehrere Werte oder Ausdrücke. §+ §§* §/ §% Addition Subtraktion (oder Negation) Multiplikation Division Modulus(Rest) § Während derAusführung eines Programms werden seine Ausdrücke ausgewertet (“evaluated”) § 1 + 1 ergibt 2 § System.out.println(3 * 4); ergibt (druckt)12 § Wie würden wir denText3 * 4 drucken? int Divisionmit / § Wenn wir ganze Zahlen dividieren ist derQuotientauch wieder eine ganze Zahl. § 14 / 4 ergibt 3, nicht 3.5 3 4 ) 14 12 2 4 10 ) 45 40 5 52 27 ) 1425 135 75 54 21 int Divisionmit / § Weitere Beispiele: § 32 / 5 § 84 / 10 ergibt 6 ergibt 8 § 156 / 100 ergibt 1 § -4 / 3 § -101 / 9 ergibt -1 ergibt -11 § Divisiondurch 0führt zu einem Fehler während der Ausführung desProgrammes int Restmit % § Der% Operatorliefert denRestderDivisionganzer Zahlen § 14 % 4 is2 § 218 % 5 is3 3 4 ) 14 12 2 43 5 ) 218 20 18 15 3 int Restmit % § Einsatz des% Operators: § Finde letzte Ziffer einer ganzen Zahl : § Finde letzte 4Ziffern: 230857 % 10 is7 658236489 % 10000 is6489 § Entscheide ob Zahl gerade ist:7 % 2 ergibt 1, 42 % 2 ergibt 0 82 RangOrdnung RangOrdnung (“precedence”):Reihenfolge inderOperatoren ausgewertet (“evaluiert”)werden. § Normalerweise werden Operatoren vonlinksnach rechts ausgewertet. 1 - 2 - 3 ist (1 - 2) - 3 ergibt -4 § Aber* / % haben eine höhere Precedence(einen höheren Rang)als + 1 + 3 * 4 ergibt 13 6 + 8 / 2 * 3 6 + 4 * 3 6 + 12 ergibt 18 RangOrdnung RangOrdnung (“precedence”):Reihenfolge inderOperatoren ausgewertet (“evaluiert”)werden. § Klammern bestimmen dieReihenfolge derAuswertung: (1 + 3) * 4 ergibt 16 § Leerzeichen (oder Kommentare)haben keinen Einfluss auf dieReihenfolge derAuswertung 1+3 * 4-2 ergibt 11 PrecedenceBeispiele § 1 * 2 + 3 * 5 % 4 § \_/ | 2 n + 3 * 5 % 4 § 2 + § 2 § n + \_/ | 15 % 4 \___/ | 3 \________/ | 5 n n n 1 + 8 % 3 * 2 - 9 \_/ | 1 + 2 * 2 - 9 \___/ | 1 + 4 - 9 \______/ | 5 - 9 \_________/ | -4 PrecedenceBeispiele Welche Werte ergeben dieAuswertung dieser Ausdrücke? §9 / 5 § 695 % 20 §7 + 6 * 5 §7 * 6 + 5 § 248 % 100 / 5 §6 * 3 - 9 / 4 § (5 - 7) * 4 § 6 + (18 % (17 - 12)) Reelle Zahlen (Typ double) § Beispiele:6.022 ,-42.0 ,2.143e17 § Hinzufügen von.0 oder . aneine ganze Zahl macht diese zu double. § DieOperatoren + - * / % () sind auch für double definiert. § / berechnet ein genaues Resultat:15.0 / 2.0 is7.5 § RangOrdnung (derAuswertung)ist dieselbe:() vor * / % vor + - Beispiel mit reellen Zahlen § 2.0 * 2.4 + 2.25 * 4.0 / 2.0 § \___/ | 4.8 + 2.25 * 4.0 / 2.0 § 4.8 + § 4.8 § + \___/ | 9.0 / 2.0 \_____/ | 4.5 \____________/ | 9.3 Kombinationen vonTypen § Wenn int unddouble kombiniert werden dann ist dasErgebnis double. § 4.2 * 3 ergibt 12.6 § Auch dann wenn dasResultals int darstellbar wäre § 4.5 * 2 ergibt 9.0 § Umwandlung (“conversion”)voneinem Typ ineinen anderen § Wird für jeden Operatorseparat gemacht undbeeinflusst nur dessen Operanden § Automatisch (werden später sehen wie wir Umwandlungen erzwingen können) Ausdrücke mit verschiedenen Typen § Umwandlung geschieht für jeden Operatorseparat … § § § § § 7 / 3 * 1.2 + 3 / 2 \_/ | 2 * 1.2 + 3 / 2 \___/ | 2.4 + 3 / 2 \_/ | 2.4 + 1 \________/ | 3.4 3 / 2 ergibt 1 nicht 1.5. • 2.0 + 10 / 3 * 2.5 - 6 / 4 • \___/ | 2.0 + 3 * 2.5 - 6 / 4 • \_____/ | 2.0 + 7.5 - 6 / 4 • \_/ | 2.0 + 7.5 1 • \_________/ | 9.5 1 • \______________/ | 8.5 92