Übungsblatt 1 Java Vorkurs (WS 2015) 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 testen sie 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 } (b) Füge nun folgende Zeile innerhalb der Klammern der main-Methode ein. Wenn sie alles richtig gemacht haben sollte das Programm kompilieren und in der Konsole eine 42 erscheinen. 1 (c) System . out . p r i n t l n ( 4 2 ) ; Ü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 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 Java Vorkurs (WS 2015) – Ü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 Implementationskommentar p a s s e n 8 System . out . p r i n t l n ( 4 2 ) ; 9 } 10 } Fügt an den oben kommentierten Stellen in eurer Klasse den passenden Kommentartyp ein. Benutzt dabei nicht copy & paste, damit ihr nicht die Eclipse Autovervollständigung umgeht. Kommentiere ab jetzt am besten alles, bei dem du dir unsicher bist, damit du dir daheim nochmal deine Kommentare durchlesen kannst! (a) Übungen: • Ändert den Autor der Klasse auf euren Namen • Fügt einen ”@version”Tag unter dem ”@author”Tag hinzu • Füge eine Beschreibung, was die ”main(String[] args)Methode macht zu ihrem Javadoc hinzu • 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 2015) – Übungsblatt 1 Seite 3 von 5 Aufgabe 3 Variablen und Datentypen Erstellen sie 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 2 3 4 5 6 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 ) { int zahl ; zahl = 42; System . out . p r i n t l n ( 4 2 ) ; } (a) Die Variable wird bis jetzt von Eclipse immer noch gelb markiert. Wir haben der Variable zwar einen Wert gegeben, benutzen sie aber noch nicht. Ersetze deshalb die 42 in println(42) durch zahl und führe das Programm aus. (b) Füge nun eine weitere Zuweisung (nicht 42) und eine weitere ’println’ Anweisung unter der ersten ein. (c) Ü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 jetzt bei der Deklaration int durch double (oder float). Erwartet: Ausgabe von 42.0 • ersetze jetzt bei der Deklaration double durch boolean und beide Zuweisungen zu true oder false. Erwartet: true und false ausgeben • ersetze jetzt bei der Deklaration boolean durch String und beide Zuweisungen zu "hier irgendein Text". Erwartet: hier irgendein Text steht zwei mal 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 Java Vorkurs (WS 2015) – Übungsblatt 1 Seite 4 von 5 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 implementiere auch dort die main-Methode. Definiere innerhalb der Methode zwei Variablen vom Typ int mit den Namen zahl1 und ergebnis und gebe die Variable ergebnis in der Konsole aus. 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. (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 dae 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 2 3 4 5 6 7 8 9 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 ) { int zahl1 = 19; double e r g e b n i s = 0 ; ergebnis = zahl1 / 5 . 0 ; System . out . p r i n t l n ( e r g e b n i s ) ; } Wie hat sich das Ergebnis nun verändert? Wie könnte dies mit den Änderungen im Code zusammen hä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. Setzte 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 das auch durch ausprobieren mit anderen Zahlen und einer anderen Formel. Teste auch ob Klammern die selbe Funktion wie in der Mathematik haben. Java Vorkurs (WS 2015) – Übungsblatt 1 Seite 5 von 5 Aufgabe 5 Casten Erstellen sie eine neue Klasse mit dem Namen Karsten. Und legen sie die main-Methode an. Erstellen sie innerhalb der main-Methode eine Variable vom Typ int mit dem Namen zahl1 und initialisiere den Wert auf 42. Desweiteren wird eine Variable vom Typ double mit dem Namen zahl2 benötigt. Diese Variable soll mit der Varibale zahl1 initialisiert werden. Füge am besten noch zwei println Befehle hinzu, um die Werte der Zahlen auszugeben. (a) 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. (b) Um aus einem Kommawert 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. Behebt nun diesen Fehler. 1 zahl1 = ( int ) zahl2 ; (c) Übungen: • weise zahl2 verschiedene Zahlen zu. Erwartet: Die Ausgabe sollte bei allen drei Zahlen für zahl1 die gleiche sein (42) • probiere auch Datentypen wie z.B. long. Erwartet: Fehler beim Kompilieren, 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. Erwartet: Ausgabe 42 und 42. • 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? Erwartet: nein • Was passiert, wenn man den String ”Hello world”nach int castet? Erwartet: Exception • Gehe wieder auf den zuletzt angegebenen Code zurück, weise zahl1 aber diesmal große Zahlen zu. Ab wann wirft Eclipse eine Exception (siehe auch Aufgabe 3 in den Teilaufgaben)