Institut für Informatik und Angewandte Kognitionswissenschaften

Werbung
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
Herunterladen