252-0027 Einführung in die Programmierung 2.1 Methoden

Werbung
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
Herunterladen