252-0027 Einführung in die Programmierung 2.1 Methoden Thomas R. Gross Department Informatik ETH Zürich
Uebersicht 2.0 Einfache Java Programme 2.1 Methoden Struktur 2.2 Typen und Variable Einfache (eingebaute) Typen Deklaration von Variablen 2
Zusammenfassung public class name { } public static void main(string[] args) { } statement; statement;... statement; class: ein Programm mit Namen method: Gruppe von Anweisungen mit Namen main statement: Anweisung die ausgeführt werden soll 3
Jedes (ausführbare) Java Programm besteht aus einer Klasse (class) die eine Methode main enthält, die eine Reihe von Anweisungen 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 und Bezeichner 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 (in Java) unterschiedlich 6
Bezeichner: Name fürein Programmelement Muss mit einem Buchstaben (gross oder klein) anfangen oder mit _ (Unterstrich, underscore ) oder mit $ (Dollarzeichen) danachziffern oder obige Zeichen Konvention: Methodenname Kleinbuchstaben 7
Reservierte Symbole keyword: Ein Bezeichner ( identifier ) der reserviert ist (weil er für die Sprache eine besondere Bedeutung hat) abstract default if private this boolean do implements protected throw break double import public throws byte else instanceof return transient case extends int short try catch final interface static void char finally long strictfp volatile class float native super while const for new switch continue goto package synchronized 8
Kommentare Kommentare ( comments ) sind Notizen im Programmtext, die einem Leser beim Verstehen des Programmes helfen (sollen) Leser: kann auch der Author sein Kommentare werden nicht ausgeführt, haben keinen Einfluss auf Programm 2 Varianten // Text bis zum Ende der Zeile /* Text bis zum naechsten */ 9
Wo sollten Kommentare stehen Anfang des Programms Zweck Algorithmus Author Anfang jeder Methode Darüber spätermehr Für Code der nicht sofort verständlich ist Kommentare wichtig für grosse Projekte, Programme mit mehreren Authoren, Programme die sich 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 von Zeichen ( 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 Und was machen wir wenn wir ein ausgeben wollen? Es gibt sogenannte Ersatzdarstellungen ( escape sequences ) mit denen ein Sonderzeichen ausgedrückt werden kann Fangen alle mit \ (Rückwärtsschrägstrich) ( backslash ) an \t Tab character \n Neue Zeile (new line character) \" Quotation mark (double quote) character \\ Backslash character 13
Beispiele Beispiel: System.out.println( \\Hallo\nWie\tgeht es \ Ihnen\?\\\\"); Output: \Hallo Wie geht es Ihnen"?\\ 15
Fragen Was drucken 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"); Welches println Statement druckt diesen String? / \ // \\ /// \\\ 16
Antwort Output jedes println Statements : a b c \\ ' """ C: euer Spor Wagen 17
Antwort println Statement um die gewünschte Zeile Output zu erzeugen : System.out.println("/ \\ // \\\\ /// \\\\\\"); 18
2.1 Methoden Beispiel: main im Program HelloWorld 19
Methoden Methode: Sequenz von Anweisungen mit einem Namen (dem der Methode) Methoden strukturieren die Anweisungen Anstatt alle Anweisungen in einer Methode (main) unterzubringen Methoden erlauben es, Wiederholungen zu vermeiden Eine (neue) Methode stellt eine neue Anweisung zur Verfügung 22
static methods static methods: Methode mit weiteren Eigenschaften main ist eine static method (Keyword static vor Name) main wird automatisch aufgerufen Wir erklärengleich wie andere Methoden aufgerufenwerden 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 des Algorithmus Lösung des Problems Aufteilung in Teil-Probleme Deklaration des Algorithmus (aufschreiben, codieren) Ausführen (aufrufen, call, invoke ) der Methode(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 des Algorithmus Lösung des Problems Aufteilung in Teil-Probleme Deklaration des Algorithmus (aufschreiben, codieren) Ausführen (aufrufen, call, invoke ) der Methode(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 die Anweisung (für die Methode name) name(); // naechste Anweisung stmt ausgeführt wird, dann wird die Methode name aufgerufen ("invoked", "called") Damit beginnt die Ausführung der Methode 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 Gibtesweitere Anweisungen? Nein: Ende der Ausführung von name Ja: Nächste Anweisungausgeführt Wir bezeichnen die Abfolge der Ausführung von Anweisungen als Kontrolfluss ( control flow ) geradliniger Kontrollfluss: die ausgeführten Anweisungen folgen im Programm aufeinander In Java: Anweisungsreihefolge ist explizit 32
Kontrollfluss bei Methodenaufruf Wenn eine Methode aufgerufen wird, dann springt die Ausführung zur Methode und führt die Anweisungen der Methode aus und danach springt" die Ausführung wieder zu dem Ort zurück von dem der Aufruf erfolgte Und es geht weiter mit der nächsten Anweisung Anordnung der Methoden im Programm(text) ohne Bedeutung
Methoden die Methoden 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 die Methoden 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 die Methoden 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 die Methoden 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 die Methoden 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 die Methoden aufrufen Hier geht es weiter 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 die Methoden 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 die Methoden 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 die Methoden 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 die Methoden 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 die Methoden 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 die Methoden 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 die Methoden 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 Hier geht es weiter } public static void message2() { System.out.println("Die 2. Nachricht:"); message1(); System.out.println("Ende von Nachricht 2"); } // message2
Methoden die Methoden 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 die Methoden aufrufen Hier geht es weiter 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 die Methoden 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(); message2(); public static void message1() { System.out.println("Nachricht 1: Fertig"); } 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 static methods Schreiben Sie ein Programm um diese Figuren zu drucken / \ / \ \ / \ / \ / \ / +--------+ / \ / \ STOP \ / \ / / \ / \ +--------+
Entwicklungsschritte / \ / \ \ / \ / \ / \ / +--------+ / \ / \ STOP \ / \ / / \ / \ +--------+ Version 1: (ohne Ausnutzen der Struktur) n n n Erstellen Sie ein Programm mit leerer main Methode. Kopieren Sie den erwünschten Output in main und schreiben für jede Zeile eine entsprechende System.out.println Anweisung. Führen Sie die Methode aus um den Output mit der gewünschten Figur zu vergleichen
Program Version 1 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(" STOP "); System.out.println("\\ /"); System.out.println(" \\ /"); System.out.println(); System.out.println(" "); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("+--------+"); } // main } // Figures1
Entwicklungsschritte / \ / \ \ / \ / \ / \ / +--------+ / \ / \ STOP \ / \ / Version 2: (mit Ausnutzen der Struktur, mit Redundanz) n n n Identifizieren Sie (eventuell vorhandene) Strukture(n). Unterteilen Sie die main Methode basierend auf Ihrer Strukturierung. Führen Sie die Methode aus um den Output mit der gewünschten Figur zu vergleichen / \ / \ +--------+
Struktur des Output / \ / \ \ / \ / \ / \ / +--------+ / \ / \ STOP \ / \ / / \ / \ +--------+ Strukturen in dieser Figur n n n n oben: Sechseck (Hexagon) (oder Ball ) darunter: Wanne (oder Suppentasse ) drittens STOP Schild" Figur viertens Trapez" (oder Hut Figur ) Struktur à Methoden : n hexagon n wanne n stopsign n hut
Program Version 2 public class Figures2 { public static void main(string[] args) { hexagon(); wanne(); stopsign(); hut(); } //main...
Program Version 2, 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(); }...
Program Version 2, 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 / \ / \ \ / \ / \ / \ / +--------+ / \ / \ STOP \ / \ / Version 3 (mit Ausnutzen der Struktur, ohne Redundanz) n n n Identifizieren Sie (eventuell vorhandene) Strukture(n) und Redundanz Erstellen Sie Methoden um (soweit möglich) Redundanz zu vermeiden Kommentieren Sie den Code / \ / \ +--------+ n Führen Sie die Methode aus 61
Redundanz im Output / \ / \ \ / \ / \ / \ / +--------+ / \ / \ STOP \ / \ / / \ / \ +--------+ n n n n Hexagon oberer Teil: im Stop Schild und Hut wiederverwendet Hexagon unterer Teil: in Wanne und Stop Schild Trennlinie: in Wanne und Hut Diese Redundanz kann durch diese Methoden ausgenutzt (d.h. eliminiert) werden: n n n hexagontop hexagonbottom line 62
Program Version 3 // 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("/ \\"); }...
Program Version 3, 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(); }...
Program Version 3, 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(); }
Program Version 3, 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 und Variable 67
Typen Typen ( types ) beschreiben Eigenschaften von Daten Ein Typ beschreibt eine Menge (oder Kategorie) von Daten Werten. Bestimmt (beschränkt) die Operationen, die mit diesen Daten gemacht werden können Viele Programmiersprachen erfordern die Angabe (Spezifikation) von Typen Typen Beispiele: ganze Zahlen, reelle Zahlen, Strings Typen sind Teil der Dokumentation (was verarbeitet diese Methode?)
Typen Die Programmiersprache legt fest, wie ein Typ implementiert ist Die interne Darstellung eines Types beruht auf Kombinationen von 1s und 0s 104 à 01101000 "hi" à 0110100001101001
Typen Die Programmiersprache legt fest, wie ein Typ implementiert ist Die interne Darstellung eines Types beruht auf Kombinationen von 1s und 0s 104 à 01101000 "hi" à 01101000 01101001 ASCII Tabelle 104 01101000 h 105 01101001 i
Wer definiert Typen? Verlangen alle Programmiersprachen die Spezifikation von Typen? Nein. (Mit manchmal überraschenden Folgen) Java verlangt die Spezifikation. Welche Typen kann ein Java Programm verwenden? Typen die in der Sprache definiert sind: eingebaute Typen ( primitive types, integrierte Typen) Beispiel: ganze Zahlen Typen aus Bibliotheken, die immer verfügbar sind (z.b. Strings) Benutzer-definierte Typen 71
Eingebaute Typen in Java Integrierte Typen ( primitive types ): 8 einfache 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 ) Legal oder nicht Programme übersetzen Sprachen, spielen Schach, berechnen die Steuerschuld Symbole werden verknüpft, verglichen, geändert, gelesen,. Typen verhindern Fehler Kann nicht die AHV Nummer zum Gehalt addieren Kann nicht Volumen und Fläche addieren 73
Ausdrücke ( Expressions ) Ausdruck ( expression ): Ein Wert oder eine Operation die einen Wert berechnet Beispiele: 1 + 4 * 5 (7 + 2) * 6 / 3 42 Der einfachste Ausdruck ist ein Literal ( literal value ). Komplexe Ausdrücke können Operatoren und Klammern enthalten
Arithmetische Operatoren Operator: Verknüpft mehrere Werte oder Ausdrücke. + Addition - Subtraktion (oder Negation) * Multiplikation / Division % Modulus (Rest) Während der Ausfü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 den Text 3 * 4 drucken?
int Division mit / Wenn wir ganze Zahlen dividieren ist der Quotient auch wieder eine ganze Zahl. 14 / 4 ergibt 3, nicht 3.5 3 4 52 4 ) 14 10 ) 45 27 ) 1425 12 40 135 2 5 75 54 21
int Division mit / Weitere Beispiele: 32 / 5 ergibt 6 84 / 10 ergibt 8 156 / 100 ergibt 1-4 / 3 ergibt -1-101 / 9 ergibt -11 Division durch 0 führt zu einem Fehler während der Ausführung des Programmes
int Rest mit % Der % Operator liefert den Rest der Division ganzer Zahlen 14 % 4 is 2 218 % 5 is 3 3 43 4 ) 14 5 ) 218 12 20 2 18 15 3
int Rest mit % Einsatz des % Operators: Finde letzte Ziffer einer ganzen Zahl : 230857 % 10 is 7 Finde letzte 4 Ziffern: 658236489 % 10000 is 6489 Entscheide ob Zahl gerade ist: 7 % 2 ergibt 1, 42 % 2 ergibt 0
82
Rang Ordnung Rang Ordnung ( precedence ): Reihenfolge in der Operatoren ausgewertet ( evaluiert ) werden. Normalerweise werden Operatoren von links nach 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
Rang Ordnung Rang Ordnung ( precedence ): Reihenfolge in der Operatoren ausgewertet ( evaluiert ) werden. Klammern bestimmen die Reihenfolge der Auswertung: (1 + 3) * 4 ergibt 16 Leerzeichen (oder Kommentare) haben keinen Einfluss auf die Reihenfolge der Auswertung 1+3 * 4-2 ergibt 11
Precedence Beispiele 1 * 2 + 3 * 5 % 4 \_/ 2 + 3 * 5 % 4 \_/ 2 + 15 % 4 \ / 2 + 3 \ / 5 n 1 + 8 % 3 * 2-9 n \_/ 1 + 2 * 2-9 n \ / 1 + 4-9 n \ / 5-9 n \ / -4
Precedence Beispiele Welche Werte ergeben die Auswertung 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. an eine ganze Zahl macht diese zu double. Die Operatoren + - * / % () sind auch für double definiert. / berechnet ein genaues Resultat: 15.0 / 2.0 is 7.5 Rang Ordnung (der Auswertung) ist die selbe: () 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 + 9.0 / 2.0 \ / 4.8 + 4.5 \ / 9.3
Kombinationen von Typen Wenn int und double kombiniert werden dann ist das Ergebnis double. 4.2 * 3 ergibt 12.6 Auch dann wenn das Result als int darstellbar wäre 4.5 * 2 ergibt 9.0 Umwandlung ( conversion ) von einem Typ in einen anderen Wird für jeden Operator separat gemacht und beeinflusst nur dessen Operanden Automatisch (werden später sehen wie wir Umwandlungen erzwingen können)
Ausdrücke mit verschiedenen Typen Umwandlung geschieht für jeden Operator separat 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