CoMa-Übung II 24.10.2012

Werbung
Java
CoMa-Übung II
TU Berlin
24.10.2012
CoMa-Übung II (TU Berlin)
Java
24.10.2012
1 / 28
Themen der Übung
1
Java-Installation
2
Hello World
3
Temperature
CoMa-Übung II (TU Berlin)
Java
24.10.2012
2 / 28
Java installieren
Installation
Java SE Development Kit 7u9 herunterladen
(http://www.oracle.com/technetwork/java/javase/
downloads/jdk7u9-downloads-1859576.html)
Installieren (hier am Beispiel von Windows 7)
Merkt euch, wohin ihr das JDK installiert!
CoMa-Übung II (TU Berlin)
Java
24.10.2012
3 / 28
Java installieren
Installation (Fortsetzung)
Nachdem das JDK installiert ist, wird nach einem Ordner für das Java
Runtime Environment gefragt
JDK = Java Programme entwickeln
JRE = Java Programme ausführen
Fertig!
CoMa-Übung II (TU Berlin)
Java
24.10.2012
4 / 28
Java installieren
Test
Kommandozeile aufrufen (Start → Nach cmd suchen → cmd
starten)
Benutzung: Befehl eingeben, mit Enter bestätigen
java -version gibt die Version des installierten Java aus
Wird der Befehl java nicht gefunden, obwohl die Installation geklappt
hat, liegt Java vermutlich nicht im (Such-)Pfad
http://www.java-forum.org/einfuehrungen-erste-schritte/
94072-java-umgebungsvariable-einstellen-windows-7-a.html
CoMa-Übung II (TU Berlin)
Java
24.10.2012
5 / 28
Java-Programme schreiben
Vom Programmierer zum Programm
Text-Editor
(NotePad++)
Programmierer
Java-Kompiler
(javac)
Text-Datei
(.java)
Java Virtual
Machine
Java-Bytecode
(.class)
Programm
Programmierer nimmt einen beliebigen Text-Editor und legt eine neue
.java-Datei an (z.B. HelloWorld.java)
Ist die Datei fertig, kann die Text-Datei mit javac HelloWorld.java
(Kommandozeile) in Java-Bytecode übersetzt werden
Java-Bytecode kann auf allen Systemen ausgeführt werden, für die es eine
Java Virtual Machine (JVM) gibt (java HelloWorld)
JVM ist Teil des JREs, der Kompiler Teil des JDKs
CoMa-Übung II (TU Berlin)
Java
24.10.2012
6 / 28
Hello World
Test
Legt eine neue Textdatei HelloWorld.java an
I
I
Groß- und Kleinschreibung beachten
Passt auf, dass kein zusätzliches .txt an den Dateinamen angehängt
wird
Schreibt das Programm:
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
Startet die Kommandozeile, navigiert in das Verzeichnis mit
HelloWorld.java
CoMa-Übung II (TU Berlin)
Java
24.10.2012
7 / 28
Hello World (Fortsetzung)
Test
Kompiliert die Datei mittels javac HelloWorld.java
Startet das Programm mittels java HelloWorld
Wenn alles gut geht, sollte das Hello World! ausgegeben werden
CoMa-Übung II (TU Berlin)
Java
24.10.2012
8 / 28
Hello World – Wenn es nicht gut geht...
Vergessenes Semikolon
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” )
}
3
4
5
6
7
}
HelloWorld.java:4:
error:
’;’ expected
Gibt eine Fehlermeldung in der Kommandozeile
Sagt euch die Art des Fehlers und wo dem Kompiler der Fehler
aufgefallen ist
CoMa-Übung II (TU Berlin)
Java
24.10.2012
9 / 28
Hello World – Wenn es nicht gut geht...
Vergessene Anführungszeichen
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( H e l l o World ! ) ;
}
3
4
5
6
7
}
Der Kompiler versucht Hello World! als Java-Befehl zu übersetzen
Geht schief, produziert ”komische” Fehlermeldungen
Mensch ist bei der Interpretation der Fehler gefragt
CoMa-Übung II (TU Berlin)
Java
24.10.2012
10 / 28
Hello World – Wenn es nicht gut geht...
Falsche Klammern
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n [ ” H e l l o World ! ” ] ;
}
3
4
5
6
7
}
Viele Symbole in Java haben eine Bedeutung
Benutzt ihr die falschen, kommt der Kompiler durcheinander
In der Regel wird nicht erkannt, was ihr eigentlich wolltet
Ergebnis: ”komische” Fehler
CoMa-Übung II (TU Berlin)
Java
24.10.2012
11 / 28
Hello World – Wenn es nicht gut geht...
Groß- und Kleinschreibung, Rechtschreibung
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
s y s t e m . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
Groß- und Kleinschreibung, Rechtschreibung sehr wichtig
Ein falscher Buchstabe und der Kompiler versteht euch nicht
Ergebnis: Der Kompiler beschwert sich, dass er etwas nicht kennt
CoMa-Übung II (TU Berlin)
Java
24.10.2012
12 / 28
Hello World – Wenn es nicht gut geht...
Klassen- und Dateinamen
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
Eine Datei mit einer Klasse namens HelloWorld muss
HelloWorld.java genannt werden
Sonst gibt es einen Fehler beim Kompilieren
CoMa-Übung II (TU Berlin)
Java
24.10.2012
13 / 28
Java – Konzepte
Konzepte
Java ist eine objekt-orientierte Programmiersprache
Man fängt mit sehr einfachen Datentypen (z.B. Zahlen) an und baut
daraus komplexere Strukturen (Klassen/Objekte)
Aus diesen Strukturen baut man dann noch komplexere Strukturen,
etc.
CoMa-Übung II (TU Berlin)
Java
24.10.2012
14 / 28
Java – Konzepte
Konzepte
Java ist eine objekt-orientierte Programmiersprache
Man fängt mit sehr einfachen Datentypen (z.B. Zahlen) an und baut
daraus komplexere Strukturen (Klassen/Objekte)
Aus diesen Strukturen baut man dann noch komplexere Strukturen,
etc.
Klassenbibliotheken
Wenn jeder bei Null anfangen würde, wäre das sehr ineffizient
Es gibt große Bibliotheken voller vorgefertigter Strukturen (die ihr
auch als Teil des JDKs bekommen habt)
Werden wir nach und nach einführen
CoMa-Übung II (TU Berlin)
Java
24.10.2012
14 / 28
Die anderen Bestandteile von Hello World
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
class
Sagt, dass ihr jetzt eine neue Klasse (= eine der erwähnten
komplexeren Strukturen) definieren wollt
Sichtbarkeitsmodifikatoren: public, private
Schlüsselwörter wie public und private bestimmen, welche Teile
eurer Klassen von außen sichtbar sind
Bsp.: In einem Handy wäre das Display public (da von außen
sichtbar), der Prozessor aber nicht.
CoMa-Übung II (TU Berlin)
Java
24.10.2012
15 / 28
Die anderen Bestandteile von Hello World
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
class
Sagt, dass ihr jetzt eine neue Klasse (= eine der erwähnten
komplexeren Strukturen) definieren wollt
Sichtbarkeitsmodifikatoren: public, private
Schlüsselwörter wie public und private bestimmen, welche Teile
eurer Klassen von außen sichtbar sind
Bsp.: In einem Handy wäre das Display public (da von außen
sichtbar), der Prozessor aber nicht.
CoMa-Übung II (TU Berlin)
Java
24.10.2012
16 / 28
Die anderen Bestandteile von Hello World
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
public static void main(String[] args)
Definiert die Einstiegsmethode für ein Programm, damit Java weiß wo
das Programm anfängt
System.out.println()
Ruft die Methode println() der Variable out der Klasse System auf
Gibt etwas in der Kommandozeile aus
CoMa-Übung II (TU Berlin)
Java
24.10.2012
17 / 28
Hello World – Zusammenfassung
1
p u b l i c c l a s s HelloWorld {
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( ” H e l l o World ! ” ) ;
}
3
4
5
6
7
}
Was ihr von dem Programm mitnehmen solltet:
System.out.println(x) gibt x auf der Kommandozeile aus und
beginnt eine neue Zeile
x kann dabei eine Zahl, eine Zeichenkette oder ein beliebiges
komplexeres Objekt sein
Ihr kennt jetzt ein Grundgerüst, um ein ausführbares Java-Programm
zu erstellen
CoMa-Übung II (TU Berlin)
Java
24.10.2012
18 / 28
Variablen und Zuweisungen in Java
Variablen
Variablen haben in Java ein Typ, der festlegt, welche Werte eine
Variable annehmen kann (vgl. n ∈ N).
Der Datentyp einer Variablen muss bei ihrer Deklaration festgelegt
werden und kann danach nicht mehr geändert werden.
Datentyp variablenName; deklariert eine Variable von Typ
Datentyp die variablenName heißt.
Datentyp variablenName1, variablenName2; für mehrere
Variablen des gleichen Typs.
Bevor eine Variable vom Programm benutzt werden kann, muss ihr
ein Wert zugewiesen werden.
Zuweisungen
Der Operator für Zuweisungen in Java ist =. Eine Zuweisung hat
somit die Form a = b;. b muss zu dem Typ von a passen.
CoMa-Übung II (TU Berlin)
Java
24.10.2012
19 / 28
(Primitive) Datentypen
Datentypen für Zahlen z ∈ Z
byte: −128 = −27 ≤ z ≤ 27 − 1 = 127
short: −32.768 = −215 ≤ z ≤ 215 − 1 = 32.767
int: −2.147.483.648 = −231 ≤ z ≤ 231 − 1 = 2.147.483.647
long: −9 · 1018 ≈ −263 ≤ z ≤ 263 − 1 ≈ 9 · 1018
Datentypen für Zahlen z ∈ Q
float: 32-bit Gleitkommazahl (≈ ±3.7 · 1038 )
double: 64-bit Gleitkommazahl (≈ ±1.8 · 10308 )
Sehr großer Wertebereich, aber Zahlen werden nur approximiert
Rundungsfehler (→ Numerik)
Andere primitive Datentypen
boolean: true/false, char: 16-bit Unicode-Zeichen
CoMa-Übung II (TU Berlin)
Java
24.10.2012
20 / 28
Operatoren
Operatoren
Addition: +, Subtraktion: −, Multiplikation ∗
Division: / (wenn einer der beiden Operanden keine Ganzzahl ist)
Ganzzahlige Division: / (wenn beide Operanden Ganzzahlen sind)
Darum: 9/5 = 1, aber 9.0/5 = 1.8
Es gelten die üblichen Präzedenzregeln: Klammern vor ∗, / vor +, −
Die Klasse Math
Stellt grundlegende mathematische Funktionen zur Verfügung
Math.round(x) gibt für einen double-Wert x den am nächsten
liegenden long-Wert zur̈uck; gibt es zwei Kandidaten, wird
aufgerundet.
CoMa-Übung II (TU Berlin)
Java
24.10.2012
21 / 28
Stolperfallen beim Rechnen
Beachtet:
Die Datentypen für Zahlen können nur Zahlen einer bestimmten
Größe darstellen. Verlässt man bei einer Rechnung diesen Bereich,
wird das Ergebnis falsch.
Java erlaubt Zuweisungen der Form a = b; nur, wenn der Datentyp
von b zu dem von a passt. Das ist unter anderem dann der Fall, wenn
I
I
I
a und b den gleichen Datentyp haben
a ein Zahlen-Datentyp ist, der einen größeren Zahlenbereich als b
darstellen kann
a ein Gleitkomma-Datentyp ist und b ein Ganzzahl-Datentyp ist
Beispiele:
double d = 1.0; int i = 1; long ell = 1;
d = i; ell = i; → geht
i = ell; → Fehler
CoMa-Übung II (TU Berlin)
Java
24.10.2012
22 / 28
Benutzereingaben einlesen
Die Klasse Scanner
Die Klasse Scanner liest Text von der Kommandozeile oder einer
Datei ein und zerlegt sie in Einheiten (Token)
Standard der Klasse ist, den gelesenen Text bei Leerzeichen zu
zerlegen, d.h. jedes Wort wird ein Token
"Hello World!" würde also zu "Hello" und "World!" zerlegt
Scanner scan = new Scanner(System.in);
erzeugt eine Variable namens scan vom Typ Scanner, welche ein
neues Scanner-Objekt zugewiesen bekommt, dass die
Kommandozeilen-Eingabe ausliest (System.in)
Lesen eines Token
nextDouble(), nextInt(), nextLong(), ... lesen das nächste Token
und wandeln es in einen double, int, long, etc. um (sofern möglich)
CoMa-Übung II (TU Berlin)
Java
24.10.2012
23 / 28
Benutzereingaben einlesen (2)
Funktionsweise
Benutzer-Eingabe kann mehrere Token enthalten; können mit
mehreren next-Aufrufen nacheinander abgearbeitet werden
Sind keine Token mehr verfügbar und wird eine next-Methode
aufgerufen, wartet das Programm auf eine Benutzer-Eingabe (d.h.
eine mit Enter bestätigte Zeichenkette)
Je nach der Umgebung, in der die Scanner-Klasse sich befindet,
erwartet die Klasse ein . (Englisch) oder ein , (Deutsch) in
Gleitkommazahlen
Kann eine Benutzer-Eingabe nicht wie gewünscht als Zahl
interpretiert werden, gibt es eine Fehlermeldung
CoMa-Übung II (TU Berlin)
Java
24.10.2012
24 / 28
Temperature
1
import j a v a . u t i l . S c a n n e r ;
2
3
4
5
6
7
8
9
10
11
12
13
14
p u b l i c c l a s s Temperature {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
double f a h r e n h e i t , c e l s i u s ;
S c a n n e r s c a n = new S c a n n e r ( System . i n ) ;
System . o u t . p r i n t l n ( ” Geben S i e e i n e Te mp er at ur i n
F a h r e n h e i t e i n und d r u e c k e n S i e r e t u r n ” ) ;
f a h r e n h e i t = scan . nextDouble () ;
c e l s i u s = 5.0 / 9 ∗ ( f a h r e n h e i t − 32) ;
c e l s i u s = Math . r o u n d ( c e l s i u s ∗ 1 0 0 ) ;
c e l s i u s = c e l s i u s / 100.0;
System . o u t . p r i n t l n ( f a h r e n h e i t + ” Grad F a h r e n h e i t
e n s t p r e c h e n ” + c e l s i u s + ” Grad C e l s i u s . ” ) ;
}
}
CoMa-Übung II (TU Berlin)
Java
24.10.2012
25 / 28
Temperature – Zusammenfassung
Was ihr von dem Programm mitnehmen solltet:
Variablen deklarieren
Grundlegende Datentypen
Zuweisungen vornehmen
Arithmetische Operatoren
Einfaches Rechnen mit Java
Runden mit Math.round
Eingaben aus der Kommandozeile auslesen mit Scanner
CoMa-Übung II (TU Berlin)
Java
24.10.2012
26 / 28
HAs und PAs
Hausaufgaben
Members-Datei anlegen (→ wichtig für euren Mumie-Zugriff und für
euren CoMa-Schein)
Streichholz-Spiel – Algorithmisches Denken
I
I
I
I
Zum Spielbeginn liegen 18 Streichhölzer auf dem Tisch
Spieler nehmen abwechselnd 1-3 Hölzer
Wer das letzte Holz nimmt, hat verloren
Kann der anfangende Spieler immer gewinnen? Was passiert, wenn es
nicht 18 Hölzer zu Beginn sind?
Linux, Taschenrechner und Suche nach dem größten Wert, für die die
Fakultätsfunktion berechnet werden kann
Programmieraufgaben
Temperature.java so modifizieren, dass ein Strompreisrechner
daraus wird
CoMa-Übung II (TU Berlin)
Java
24.10.2012
27 / 28
Temperature
1
import j a v a . u t i l . S c a n n e r ;
2
3
4
5
6
7
8
9
10
11
12
13
14
p u b l i c c l a s s Temperature {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
double f a h r e n h e i t , c e l s i u s ;
S c a n n e r s c a n = new S c a n n e r ( System . i n ) ;
System . o u t . p r i n t l n ( ” Geben S i e e i n e Te mp er at ur i n
F a h r e n h e i t e i n und d r u e c k e n S i e r e t u r n ” ) ;
f a h r e n h e i t = scan . nextDouble () ;
c e l s i u s = 5.0 / 9 ∗ ( f a h r e n h e i t − 32) ;
c e l s i u s = Math . r o u n d ( c e l s i u s ∗ 1 0 0 ) ;
c e l s i u s = c e l s i u s / 100.0;
System . o u t . p r i n t l n ( f a h r e n h e i t + ” Grad F a h r e n h e i t
e n s t p r e c h e n ” + c e l s i u s + ” Grad C e l s i u s . ” ) ;
}
}
fahrenheit – Jahresstromverbrauch, celsius – Preis
Formeln, Namen, Kommentare und Ausgaben anpassen für PA 1
CoMa-Übung II (TU Berlin)
Java
24.10.2012
28 / 28
Herunterladen