Themen der Übung Java CoMa-Übung II TU Berlin 1 Java-Installation Hello World 3 Temperature 4.10.01 CoMa-Übung II (TU Berlin) Java 4.10.01 1 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 / 8 Java installieren Installation Java SE Development Kit 7u9 herunterladen (http://www.oracle.com/technetwork/java/javase/ downloads/jdk7u9-downloads-185957.html) Installieren (hier am Beispiel von Windows 7) Java installieren Installation (Fortsetzung) Nachdem das JDK installiert ist, wird nach einem Ordner für das Java Runtime Environment gefragt Merkt euch, wohin ihr das JDK installiert! CoMa-Übung II (TU Berlin) Java 4.10.01 3 / 8 JDK = Java Programme entwickeln JRE = Java Programme ausführen Fertig! CoMa-Übung II (TU Berlin) Java 4.10.01 4 / 8
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/ 9407-java-umgebungsvariable-einstellen-windows-7-a.html Java-Programme schreiben Vom Programmierer zum Programm Programmierer Text-Editor (NotePad++) Text-Datei (.java) Java-Kompiler (javac) Java-Bytecode (.class) Java Virtual Machine 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 4.10.01 5 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 / 8 Hello World Test Legt eine neue Textdatei HelloWorld.java an Groß- und Kleinschreibung beachten Passt auf, dass kein zusätzliches.txt an den Dateinamen angehängt wird Schreibt das Programm: 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 Startet die Kommandozeile, navigiert in das Verzeichnis mit HelloWorld.java CoMa-Übung II (TU Berlin) Java 4.10.01 7 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 8 / 8
Hello World Wenn es nicht gut geht... Vergessenes Semikolon 4 System. out. p r i n t l n ( H e l l o World! ) 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 Hello World Wenn es nicht gut geht... Vergessene Anführungszeichen 4 System. out. p r i n t l n ( H e l l o World! ) ; 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 4.10.01 9 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 10 / 8 Hello World Wenn es nicht gut geht... Hello World Wenn es nicht gut geht... Falsche Klammern 4 System. out. p r i n t l n [ H e l l o World! ] ; 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 Groß- und Kleinschreibung, Rechtschreibung 4 system. out. p r i n t l n ( H e l l o World! ) ; 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 4.10.01 11 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 1 / 8
Hello World Wenn es nicht gut geht... Klassen- und Dateinamen Eine Datei mit einer Klasse namens HelloWorld muss HelloWorld.java genannt werden Sonst gibt es einen Fehler beim Kompilieren 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 4.10.01 13 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 14 / 8 Die anderen Bestandteile von Hello World 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 4.10.01 15 / 8 Die anderen Bestandteile von Hello World 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 4.10.01 1 / 8
Die anderen Bestandteile von Hello World Hello World Zusammenfassung 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 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 4.10.01 17 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 18 / 8 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, variablenname; 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 4.10.01 19 / 8 (Primitive) Datentypen Datentypen für Zahlen z Z byte: 18 = 7 z 7 1 = 17 short: 3.78 = 15 z 15 1 = 3.77 int:.147.483.48 = 31 z 31 1 =.147.483.47 long: 9 10 18 3 z 3 1 9 10 18 Datentypen für Zahlen z Q float: 3-bit Gleitkommazahl ( ±3.7 10 38 ) double: 4-bit Gleitkommazahl ( ±1.8 10 308 ) Sehr großer Wertebereich, aber Zahlen werden nur approximiert Rundungsfehler ( Numerik) Andere primitive Datentypen boolean: true/false, char: 1-bit Unicode-Zeichen CoMa-Übung II (TU Berlin) Java 4.10.01 0 / 8
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 zu ruck; gibt es zwei Kandidaten, wird aufgerundet. 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 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 4.10.01 1 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 / 8 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) Benutzereingaben einlesen () 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 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 4.10.01 3 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 4 / 8
Temperature Temperature Zusammenfassung 1 import j a v a. u t i l. Scanner ; 3 p u b l i c c l a s s Temperature { 4 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 5 double f a h r e n h e i t, c e l s i u s ; Scanner scan = new Scanner ( System. i n ) ; 7 System. out. p r i n t l n ( Geben S i e e i n e Temperatur i n F a h r e n h e i t e i n und druecken S i e r e t u r n ) ; 8 f a h r e n h e i t = scan. nextdouble ( ) ; 9 c e l s i u s = 5. 0 / 9 ( f a h r e n h e i t 3) ; 10 c e l s i u s = Math. round ( c e l s i u s 100) ; 11 c e l s i u s = c e l s i u s / 1 0 0. 0 ; 1 System. out. 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. ) ; 13 } 14 } 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 4.10.01 5 / 8 CoMa-Übung II (TU Berlin) Java 4.10.01 / 8 HAs und PAs Hausaufgaben Members-Datei anlegen ( wichtig für euren Mumie-Zugriff und für euren CoMa-Schein) Streichholz-Spiel Algorithmisches Denken 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 4.10.01 7 / 8 Temperature 1 import j a v a. u t i l. Scanner ; 3 p u b l i c c l a s s Temperature { 4 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 5 double f a h r e n h e i t, c e l s i u s ; Scanner scan = new Scanner ( System. i n ) ; 7 System. out. p r i n t l n ( Geben S i e e i n e Temperatur i n F a h r e n h e i t e i n und druecken S i e r e t u r n ) ; 8 f a h r e n h e i t = scan. nextdouble ( ) ; 9 c e l s i u s = 5. 0 / 9 ( f a h r e n h e i t 3) ; 10 c e l s i u s = Math. round ( c e l s i u s 100) ; 11 c e l s i u s = c e l s i u s / 1 0 0. 0 ; 1 System. out. 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. ) ; 13 } 14 } fahrenheit Jahresstromverbrauch, celsius Preis Formeln, Namen, Kommentare und Ausgaben anpassen für PA 1 CoMa-Übung II (TU Berlin) Java 4.10.01 8 / 8