Übungsblatt 1 Java Vorkurs (WS 2016) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erstelle eine neue Klasse HelloJava. (a) Schreibe die main-Methode in die Klasse und teste, ob das Programm kompiliert. 1 public c l a s s HelloJava { 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 ) { 3 4 } 5 } (b) Füge nun folgende Zeile innerhalb der Klammern der main-Methode ein. Wenn du alles richtig gemacht hast, sollte das Programm kompilieren und in der Konsole eine 42 erscheinen. 1 System . out . p r i n t l n ( 4 2 ) ; (c) Übungen: • Lösche 42 aus System.out.println(42);. Erwartet: Keine sichtbare Ausgabe. • Ersetze 42 durch 42, 42. Erwartet: Fehler beim Kompilieren, println erwartet genau ein Argument. • Ersetze 42 durch 42.0. Erwartet: Ausgabe im Format eines double, 42.0. • Ersetze 42 durch (andere) beliebige Zahlen. • Ersetze 42 durch "42". Erwartet: gleiche Ausgabe wie bei der einzelnen Zahl, Eclipse färbt "42" im Code aber anders ein. • Ersetze "42" durch "Hello Java". Erwartet: Hello Java steht in der Konsole. • Ersetze "Hello Java" durch Hello Java. Erwartet: Fehler beim Kompilieren, Text wird als Code behandelt. • Ersetze Hello Java durch "Hello \n Java". Erwartet: die Wörter werden in Zeilen aufgeteilt. • Teste auch die Wirkung von \t, \\, \" zwischen den Anführungszeichen. • Kopiere die komplette Zeile mit dem println-Befehl und füge sie direkt unter dieser Zeile ein weiteres mal ein Erwartet: Ausgabe verdoppelt • Was passiert, wenn man in der oberen Zeile das ln von println löscht? • Zeichne einen Smiley in die Konsole • Versuche nun folgenden Text auf der Konsole auszugeben: Java Vorkurs 2016 Navi: "Look, Link! You’re big now!!! You’ve grown up!" Java Vorkurs (WS 2016) – Übungsblatt 1 Seite 2 von 5 Aufgabe 2 Kommentare In Java gibt es mehrere Möglichkeiten den eigentlichen Code mit Hinweisen für sich selbst und andere Programmierer zu versehen: 1. Einzeilige Implementierungskommentare: 1 // A l l e s h i n t e r den z w e i Schr ä g s t r i c h e n i s t Kommentar ( b i s zum Z e i l e n e n d e ) 2. Mehrzeilige Implementierungskommentare: 1 /∗ 2 ∗ A l l e s von ”/∗” b i s ”∗ /” i s t e i n Kommentar 3 ∗/ 3. Javadoc Kommentare: 1 /∗∗ 2 ∗ Javadoc Kommentare b e g i n n e n mit ”/∗∗” ( z w e i S t e r n e n ! ) 3 ∗ I n einem Javadoc Kommentar kann man auch s p e z i e l l e Tags verwenden : 4 ∗ 5 ∗ @author Max Mustermann 6 ∗ 7 ∗ Javadoc Kommentare s i n d s p e z i e l l , da e s v i e l e Werkzeuge g i b t , d i e s i e 8 ∗ a u t o m a t i s i e r t a u s l e s e n kö nnen und d a r a u s gut l e s b a r e Dokumente e r s t e l l e n kö nnen . 9 ∗ 10 ∗ Javadoc kann nur d i r e k t ü b e r K l a s s e n und Methoden s t e h e n . 11 ∗ 12 ∗ E c l i p s e z e i g t euch beim A u f r u f e i n e r Methode den e n t s p r e c h e n d e n Javadoc Kommmentar an , 13 ∗ wenn i h r den M a u s z e i g e r ü b e r dem M e t h o d e n a u f r u f p o s i t i o n i e r t . 14 ∗/ Eure Klasse HelloJava aus Aufgabe 1 sollte etwa so aussehen (ohne die Kommentare): 1 // H i e r s o l l t e e i n Javadoc h i n 2 public c l a s s HelloJava { 3 4 // H i e r s o l l t e e i n Javadoc h i n 5 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 ) { 6 7 // H i e r wü r d e e i n Implementierungskommentar p a s s e n 8 System . out . p r i n t l n ( 4 2 ) ; 9 } 10 } (a) Füge an den oben kommentierten Stellen in eurer Klasse den passenden Kommentartyp ein. Benutze dabei nicht copy & paste, damit du nicht die Eclipse Autovervollständigung umgehst. Kommentiere ab jetzt am besten alles, bei dem du dir unsicher bist, damit du dir daheim nochmal deine Kommentare durchlesen kannst! (b) Übungen: • • • • • Ändere den Autor der Klasse auf euren Namen Füge einen @version-Tag unter dem @author-Tag hinzu Füge zu dem JavaDoc Kommentar der main(String[] args)-Methode eine Beschreibung Was für @-Tags kann man noch in Javadoc benutzen? Wie kann man in Eclipse das Javadoc zu einer Webseite kompilieren lassen? Java Vorkurs (WS 2016) – Übungsblatt 1 Seite 3 von 5 Aufgabe 3 Variablen und Datentypen Verwende die in Aufgabe 2 kommentierte Klasse HelloJava. (a) Erstelle innerhalb der main-Methode (aber oberhalb der println() Zeile) eine int Variable mit dem Namen zahl. Weise dann der Variable zahl den Wert 42 zu: 1 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 ) { 2 int zahl ; 3 zahl = 42; 4 5 System . out . p r i n t l n ( 4 2 ) ; 6 } (b) Die Variable wird bis jetzt von Eclipse immer noch gelb markiert. Wir haben der Variable zwar einen Wert gegeben, benutzen diese aber noch nicht. Ersetze deshalb die 42 in println(42) durch zahl und führe das Programm aus. (c) Füge nun eine weitere Zuweisung (nicht 42) und eine weitere println()-Anweisung unter der ersten ein. Was passiert? (d) Übungen: • Ersetze die erste Zuweisung (42) durch eine negative Zahl. Erwartet: Negative, dann positive Zahl in Konsole. • Ersetze die erste Zuweisung durch eine sehr große Zahl (> 2147483647). Erwartet: Fehler beim Kompilieren, zahl ist zu groß für int • Ersetze die erste Zuweisung durch ”42.0”. Erwartet: Fehler beim Kompilieren, da falscher Datentyp • Ersetze bei der Deklaration int durch double (oder float). Erwartet: Ausgabe von 42.0 • Ersetze bei der Deklaration double durch boolean und beide Zuweisungen zu true oder false. Erwartet: true und false ausgeben • Ersetze bei der Deklaration boolean durch String und beide Zuweisungen zu "hier irgendein Text". Erwartet: hier irgendein Text steht zweimal in der Konsole • Finde den Unterschied zwischen int und long, indem du verschiedene Zahlen ausprobierst. • Finde den Unterschied zwischen float und double, indem du verschiedene Zahlen ausprobierst. • Was ist ein char? Benutze char im richtigen Kontext und gebe es auf der Konsole aus. Aufgabe 4 Rechenoperatoren für Zahlen In dieser Aufgabe wollen wir nun mit Variablen rechnen. Du wirst die Anwendung der Grundrechenarten in Java lernen und das Rechnen mit Variablen unterschiedlichen Typs. (a) Erstelle eine neue Klasse RechnerKlasse und füge eine leere main-Methode hinzu. Definiere innerhalb der Methode zwei Variablen vom Typ int mit den Namen zahl1 und ergebnis und gebe die Variable ergebnis in der Konsole aus. Achtung: Eclipse sollte nun einen Fehler anzeigen, der besagt, dass die Variable ergebnis nicht initialisiert wurde. Setze daher die Variable gleich 0. Setze auch die Variable zahl1 auf eine ganze Zahl deiner Wahl. (b) Nun ist alles soweit, damit wir mit dem Rechnen beginnen können. Im ersten Schritt wollen wir zu der Variable zahl1 5 addieren und das Ergebnis in der Variable ergebnis speichern. Dies funktioniert mit folgender Code-Zeile: 1 ergebnis = zahl1 + 5; Wenn du nun das Programm startest, sollte auf der Konsole die um 5 erhöhte Zahl stehen. (c) In gleicher Weise kannst du auch die anderen Grundrechen-Operatoren anwenden. In Java werden sie durch + (plus), - (minus), * (mal) und / (geteilt) dargestellt. Bei der Division ist noch etwas besonderes zu beachten, wie wir gleich noch sehen werden. Als Test kannst du mal das + durch ein - oder * ersetzen und schauen, ob beim Ausführen das erwartete Ergebnis auf der Konsole angezeigt wird. Java Vorkurs (WS 2016) – Übungsblatt 1 Seite 4 von 5 (d) Setze nun die Variabele zahl1 auf 19 und ersetze den Operator durch / und lasse das Programm laufen. Wir erwarten die Ausgabe 3.8, da 19/5 = 3.8. Vergleiche das erwartete Ergebnis mit der Ausgabe auf der Konsole. Was fällt dir auf und woran könnte dies liegen? (e) Verändere nun die Methode wie folgt und lasse anschließend das Programm erneut kompilieren. 1 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 ) { 2 3 int zahl1 = 19; 4 double e r g e b n i s = 0 ; 5 6 ergebnis = zahl1 / 5 . 0 ; 7 8 System . out . p r i n t l n ( e r g e b n i s ) ; 9 } Wie hat sich das Ergebnis nun verändert? Wie könnte dies mit den Änderungen im Code zusammenhängen? (f) Wir wollen nun mit einer zweiten Variable rechnen. Füge dazu im oberen Teil der main-Methode bei den anderen Variablen eine weitere Variable zahl2 von Typ int ein und initialisiere sie auf 0. Weise nun der Variable ergebnis den Wert zahl1 / zahl2 zu. Führe das Programm erneut aus. Was stellst du fest? (g) Verändere nun selbst einmal die Werte der Zahlen und den Operator, um einige andere Berechnungen durchzuführen. (h) Deklariere nun eine weitere Variable zahl3 vom Typ int und initialisiere sie auf den Wert 4. Setze die Variablen zahl1 und zahl2 auf die Werte 19 und 2. Speichere nun in der Variable ergebnis das Ergebnis der Formel zahl1 + zahl2 ∗ zahl3. Beachtet Java Punkt-Vor-Strich Rechnung? Prüfe dies auch durch Ausprobieren mit anderen Zahlen und einer anderen Formel. Teste auch, ob Klammern dieselbe Funktion wie in der Mathematik haben. Java Vorkurs (WS 2016) – Übungsblatt 1 Seite 5 von 5 Aufgabe 5 Casten Manchmal ist es nötig, Typen zu konvertieren. In Java nennt man dies Casten. Typ boolean char byte short int long float double Länge 1 Bit 16 Bit 8 Bits 16 Bits 32 Bits 64 Bits 32 Bits 64 Bits Bereich true / false Einzelnes Zeichen (65.536 verschiedene Zeichen) -128 bis 127 -32.768 bis 32.767 -2.147.483.648 bis 2.147.483.647 −263 bis 263 − 1, ab Java 8 auch 0 bis 264 − 1 +/-1,4E-45 bis +/-3,4E+38 +/-4,9E-324 bis +/-1,7E+308 (a) Erstelle eine neue Klasse mit dem Namen Casten. Und lege die main-Methode an. Erstelle innerhalb der main-Methode eine Variable vom Typ int mit dem Namen zahl1 und initialisiere den Wert auf 42. Des Weiteren wird eine Variable vom Typ double mit dem Namen zahl2 benötigt. Diese Variable soll mit dem Wert der Variable zahl1 initialisiert werden. Füge am besten noch zwei println Befehle hinzu, um die Werte der Zahlen auszugeben. Starte das Programm, welchen Wert hat die Variable zahl2? Was ist der Unterschied zwischen zahl1 und zahl2? (b) Drehe jetzt das Ganze um: Weise nach den println Befehlen der Variable zahl2 den Wert 42.0 zu und danach der Variable zahl1 den Wert zahl2. Schreibe danach zwei weitere printlnBefehle für die beiden Variablen. Achtung: Es wird hier eine Fehlermeldung auftreten. Woran liegt das? Was ist das Problem? (c) Um aus einer Fließkommazahl eine Ganzzahl zu machen, braucht Java die Bestätigung, dass die Ziffern hinter dem Komma wegfallen dürfen, um einen ungewollten Datenverlust zu vermeiden. Dies geschieht indem man vor den Wert vom Typ float den benötigten Typ, in diesem Fall ein int, in Klammern setzt. Diesen Vorgang bezeichnet man als casten. Behebe nun diesen Fehler aus Aufgabenteil (b). (d) Übungen: • Probiere, anstatt double, auch Datentypen wie z.B. long aus. Erwartet: Fehler beim Kompilieren, da long kann nicht automatisch in int gecastet werden, da long längere Zahlen speichern kann als int. • Passe den vorherigen Code so an, dass er kompiliert. • double und float stehen in einer ähnlichen Beziehung wie int und long. In welche Richtung muss man casten, in welche Richtung geht das ohne cast. • Kann man auch von boolean nach int casten? • Was passiert, wenn man den String "Hello world" nach int castet? Erwartet: Fehlermeldung (Exception) • Stelle sicher, dass die Variable zahl1 vom Typ int ist. Weise zahl1 diesmal große Zahlen zu. Ab wann wirft Eclipse eine Exception (siehe auch Aufgabe 3 in den Teilaufgaben)? Woran kann dies liegen?