Institut für Informatik und Angewandte Kognitionswissenschaften Grundlegende Programmiertechniken (»Programmierung«), WS 2007/2008 Nino Simunic M.A. Übungsblatt 5 Präsenzaufgaben: Hausaufgabe: Aufgabe 11 11, 12, 13 14 STRING- UND OBJEKT-VERGLEICH String s1 = new String("Test String"); String s2 = "Test String"; String s3 = s2; System.out.println(s1==s2); System.out.println(s1==s3); System.out.println(s2==s3); System.out.println("-----"); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s2.equals(s3)); Code-Fragment Die Klasse String ist ein Sonderfall und erlaubt das Erzeugen von Objekten ohne den new-Operator. Schauen Sie sich zur Beantwortung der Fragen gegebenenfalls auch die Java-API (Dokumentation) zur String-Klasse an, welche Beschreibungen zu den Methoden: http://java.sun.com/javase/6/docs/api/java/lang/String.html Aufgaben: (a) Die equals-Methode von String gibt einen Wert von spezifischem Typ an ausführender Stelle zurück (analog zu arithmetischen Ausdrücken, die bspw. einen Wert vom Typ int an ausführender Stelle zurückgeben). Welcher Typ ist hier gemeint? (b) Nennen und erklären Sie die 6 Ausgaben des Code Fragments oberhalb. (c) Wie könnte man sicherstellen, dass der Vergleich zwischen "Test String" und "test string" positiv (true) ausfällt (String-Methode)? Grundlegende Programmiertechniken Nino Simunic M.A. WS 2007/2008 Seite 1 Institut für Informatik und Angewandte Kognitionswissenschaften Aufgabe 12 KLASSENMETHODEN, UND –VARIABLEN (MATH, WRAPPER-KLASSEN) Sie haben in der Vorlesung gesehen, dass es auch Methoden gibt, die direkt über eine Klasse und nicht via Instanz der Klasse aufgerufen werden: Klassenmethoden. Ein Beispiel hierfür ist die von Ihnen bereits häufig eingesetzte printlnMethode oder bspw. Integer.parseInt(): Ohne ein Objekt erzeugt zu haben, rufen Sie diese Methode auf. (Merken Sie sich für jetzt und später: Klassenvariablen und –methoden werden immer über die Klasse aufgerufen, selbst wenn Objekte diesen Typs bestehen oder erzeugt werden könnten). Die Methode rand() der Klasse Math (Im JDK enthalten) ist eine von vielen Klassenmethoden, welche Math zur Verfügung stellt, und welche wie in diesem Fall an aufrufender Stelle einen Wert zurückgibt. Ferner existieren auch komplexe Datentypen (Klassen/Referenzdatentypen) zu den primitiven (hier numerischen) Datentypen int, double, float, short, …. Diese werden als sogenannte Wrapper-Klassen bezeichnet: Im Kern z.B. der Integer-Klasse dreht sich ja noch immer alles um den int-Wert – dieser wird jedoch durch vielen nützliche Methoden und Variablen von einer Klasse verpackt (daher Wrapper) zur Verfügung gestellt. Erinnern Sie sich daran, dass einfache Datentypen über keine Methoden oder Variablen verfügen! Schauen Sie sich zur Lösung die Java-API (Dokumentation) zu den benötigten Klassen an. Eine Auflistung der aktuell relevanten Klassen finden Sie hier: http://java.sun.com/javase/6/docs/api/java/lang/package-summary.html Sie werden in den kommenden Vorlesungen natürlich mehr zum Thema Klassenmethode/-variable lernen, u.a. wie Sie selbst Derartiges in Ihren Klassen implementieren. Aufgabe (Implementierung in main-Methode reicht): (a) Zeigen Sie eine Anweisung (nötigenfalls auch Anweisungen), die eine Zufallszahl zwischen 0 und 100 auf dem Bildschirm ausgibt. Verwenden Sie dafür die Methoden Math.rand() (und Math.round()) und ggfs. weitere Operationen. (b) Mit welchen zwei Math-Klassenmethoden kann die größere bzw. kleinere von zwei Zahlen, welche als Argumente an die Methode(-n) übergeben werden, ermittelt werden? Zeigen Sie jeweils ein Beispiel. (c) Zeigen Sie, wie Sie mittels der Wrapper-Klassen (Integer, Double, Float, Short, Long) die maximalen Werte für int, double, float, short, und long ermitteln können, um sie auf dem Monitor auzugeben. Es sind keine Methoden, welche diese Information liefern, sondern Klassenvariablen. Die Ausgabe sollte in etwa so aussehen: Integer/int: Double/double: Float/float: … 2147483647 1.7976931348623157E308 3.4028235E38 Grundlegende Programmiertechniken Nino Simunic M.A. WS 2007/2008 Seite 2 Institut für Informatik und Angewandte Kognitionswissenschaften Aufgabe 13 WORT ALS OBJEKT Implementieren Sie ein Programm, welches das Genus von (lateinischen) Wörtern, welche auf –us (mask.), -a (fem.), oder – um (neutr.) enden, in etwa wie folgt auf dem Bildschirm ausgeben kann: Genus von "Servus" ist: Maskulinum Genus von "Nina" ist: Femininum Strings sind Objekte in Java. Objekte diesen Typs können auf eine Vielzahl von Methoden zugreifen (via Punktoperator/notation), um z.B. die Länge eines Strings zu ermitteln, oder aber auch, um zu überprüfen, ob eine bestimmte Zeichenkette ("us") das Ende einer anderen Zeichenkette ist ("Marcus"). Schauen Sie sich in der Java-API die Methoden der Klasse String an, um eine für den aktuellen Zweck passende Methode zu finden (Tipp: Übersetzen Sie »endet auf« ins Englische). Aufgabe: Programmieren Sie eine Klasse Wort, deren Zustand sich aus dem Wort als Zeichenkette zusammensetzt. Achten Sie darauf, dass beim Erzeugen eines Worts via new-Operator auch ein Argument übergeben werden muss, und zwar das Wort als Zeichenkette. Damit das möglich ist, benötigt Ihre Klasse einen Konstruktor, welche eine Zeichenkette entgegennimmt und sie der Instanzvariablen zuweist. Objekte der Klasse Wort sollen die Möglichkeit haben, das Genus des Worts auf dem Bildschirm auszugeben. Programmieren Sie eine ausführbare Klasse GenusTest, um Objekte vom Typ Wort zu erzeugen und sie zu verwenden (Genus ausgeben). Gegebenenfalls sollten Sie Code aus den Vorlesungsfolien als Vorlagen verwenden und modifizieren, falls Sie noch sehr unsicher sind. Auch Zusatzliteratur ist, wie bereits mehrfach angemerkt, stets von Vorteil. Grundlegende Programmiertechniken Nino Simunic M.A. WS 2007/2008 Seite 3 Institut für Informatik und Angewandte Kognitionswissenschaften Aufgabe 14 VEKTOR-RAUM Dies Aufgabe benötigt Wissen der kommenden Vorlesung: Methoden, Arrays, Schleifen. Erklärung, Aufgabe: Implementieren Sie ein Programm, welches einen Vektor als Punkt in einem dreidimensionalen Raum darstellen kann. Keine Sorge, die Darstellung wird rein ASCII-basiert sein, Sie müssen keine grafischen Komponenten implementieren. Vektoren entsprechen Punkten im mehrdimensionalen Raum. Ein Beispiel für Vektoren im dreidimensionalen Raum: Vektoren d1, d2, d3. Die angesprochenen Punkte liegen am Ende des Graphen. Zur Veranschaulichung1: Nachstehend ist die Darstellung des Beispiels als ASCII-Matrix (»nur Text«-Matrix). Die ASCII-Darstellung zeigt zunächst nur zwei Dimensionen (x→, y ↑). Die dritte Dimension, z, wird nur für den anzuzeigenden Vektor an entsprechender x,yKoordinate als Wert für die z-Dimension in der 2D-Matrix angezeigt. 6 5 4 3 2 1 0 X X X X X X X 0 X X X X 2 5 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 0 1 2 3 4 5 6 Anmerkungen zur Implementierung: 1 Ihre Raumdarstellung, bzw. der Raum, muss nur einen Vektor anzeigen können. Die Raumgröße muss über drei Dimensionen definierbar sein (x,y,z): Sie stellen das Maximum der jeweiligen Dimension dar. Bspw. (10,10,10) wäre ein Raum, mit Höhe, Breite, Tiefe = 10. Ein Vektor muss über drei Dimensionen definierbar sein (x,y,z). Ein Vektor wird nur im Raum angezeigt, wenn er innerhalb der Raum-Größe liegt. Sonst wird der Raum ohne ihn angezeigt. Bei einer Größe von (10,10,10) und einem Vektor (14,2,55) muss jedoch mindestens ein Hinweis ausgegeben werden, dass der Vektor außerhalb des Raums liegt. Die Grafik ist aus Darstellungsgründen nicht zu 100% genau und dient ausschließlich der groben Veranschaulichung des Beispiels. Grundlegende Programmiertechniken Nino Simunic M.A. WS 2007/2008 Seite 4 Institut für Informatik und Angewandte Kognitionswissenschaften Ihr Programm muss mindestens die Klassen Raum und RaumTest (mit main-Methode zum Erstellen und zur Verwendung der Objekte (z.B. Anzeigen der Matrix/des 2D-Raums)) enthalten. Eine weitere Klasse wäre durchaus sinnvoll. Schauen Sie sich einmal die wiederholt auftretenden Daten an und überlegen Sie. Es muss nur die Matrix (ohne y,x Koordinaten unterhalb und links davon) dargestellt werden. Grundlegende Programmiertechniken Nino Simunic M.A. WS 2007/2008 Seite 5