3.1. Einfache Punktobjekte Der folgende Programmausschnitt erzeugt einen Punkt und belegt ihn mit Koordinaten: Point p = new Point(); p.setLocation( 12, 34 ); Überlege, ob es auch noch andere Lösungen gibt den Punkt p auf die Koordinaten (12, 34) zu setzen. Schlage in der Hilfe der Klasse java.awt.Point nach. Prüfe die Belegung, in dem du mit toString() die Werte auf dem Bildschirm bringst. <../solution.gif> Lösung import java.awt.*; public class Pointx { public static void main( String args[] ) { Point p = new Point(); p.setLocation( 12, 34 ); // // // // p.x=12; p.y=34; // p.translate(12,34); p.move(12,34); System.out.println(p.toString()); } } 3.2. Polygone Erzeuge ein leeres Polygon Objekt. Die Klasse java.awt.Polygon liegt wie Point im Paket java.awt. Ein Polygon besteht aus Punkten, die mit einer Methode hinzugefügt werden. Wie heißt diese Methode? Erzeuge ein Dreieck. Teste anschließend, ob ein gewählter Punkt innerhalb des Dreiecks liegt. Gehören Punkte auf der Linie zum Inneren? Was ist mit den Punkten selbst. Gehören sie zum Inneren oder Äußeren des Polygons? <../solution.gif> Lösung import java.awt.*; public class Poly { static void main( String args[] ) { Polygon p = new Polygon(); p.addPoint(2,6); p.addPoint(5,2); p.addPoint(8,6); System.out.println( p.contains(5,2) ); } } 3.3. Fenster Um eine Klasse für einen passenden Fall zu finden ist es sinnvoll, sich bestimmte Substantive zu suchen, die das Problem beschreiben. Da die Bibliothek auf Englisch ist, müssen wir uns englische Synonyme suchen. Wenn die eine Klasse für grafische Fenster suchen, wie dürfe die Klasse dann heißen? Wenn Point in dem awt-Paket liegt, wo liegt dann die Fenster-Klasse? Lege ein passendes Frame-Objekt an. Man muss eine Methode nutzen, um es auf dem Bildschirm darzustellen. Wie heißt die Methode? Tipp: Vielleicht irgend etwas wie "anzeigen" auf englisch? Wenn man das Programm startet ist das Fenster ziemlich klein. Wie kann man die Größe des Fensters setzen. Tipp: Vielleicht irgend etwas mit "size"? Der Titel eines Fenster kann ebenfalls gesetzt werden. Wie sind die beiden Möglichkeiten dazu? <../solution.gif> Lösung import java.awt.*; public class Fensterln { public static void main(String[] args) { String title = "Mein erstes Fenster"; Frame fenster1 = new Frame(title); int r = 000; int g = 000; int b = 200; Color blau = new Color(r,g,b); fenster1.setBackground(blau); fenster1.setSize( 400,400 ); System.out.println( fenster1.getBackground() ); fenster1.show(); } } 3.4. Funktionen mit Referenz-Parametern Implementiere eine Funktion dist(Point), die die Distanz zum Nullpunkt als Fließkommazahl zurückgibt. Kurz skizziert soll die Funktion folgendes Format haben: static double dist( Point p ) { // return Abstand zum Nullpunkt } Implementiere eine Funktion abs(Point), die in einem übergebenen Point-Objekt darauf achtet, dass die Koordinaten alle positiv sind. Wenn etwa der Funktion ein Objekt Point p = new Point(-2,2) übergeben wird, dann wird nach dem Aufruf von abs(p) das Point-Objekt die Koordinaten (2,2) beinhalten. Nutze zum Testen den vorgefertigten Programmblock: public static void main( String args[] ) { Point p = new Point( -2, 2 ); System.out.println( p.toString() ); // -2,2 abs( p ); System.out.println( p.toString() ); // 2,2 } <../solution.gif> Lösung import java.awt.*; public class Distanz { static double dist( Point p ) { return Math.sqrt(p.x*p.x + p.y*p.y); } static void abs( Point p ) { p.x = Math.abs( p.x ); p.y = Math.abs( p.y ); } public static void main( String args[] ) { Point punkt = new Point(5,5); System.out.println("x-Koordinate: " + punkt.x); System.out.println("y-Koordinate: " + punkt.y); System.out.println("Abstand vom Koordinatenursprung: " + dist(punkt)); Point p = new Point( -2, 2 ); System.out.println( p.toString() ); // -2,2 abs( p ); System.out.println( p.toString() ); // 2,2 } } 3.5. Die Klasse java.util.Date Die Klasse java.util.Date kapselt interessante Informationen über das Datum. Da sich die Klasse im Paket java.util befindet, muss man das Paket mit import am Anfang der .java-Datei importieren. Erzeuge ein Datums-Objekt mit ihrem Geburtsdatum. Kann man ein Datums-Objekt einfach mit new Date(Tag, Monat, Jahr) erzeugen? Finde heraus, an welchem Wochentag du Geburtstag hast. Schreibe eine Methode dayOfWeek(), die den Wochentag in der Landessprache ausgibt. So sollte dayOfWeekString(0) die Zeichenkette "Sonntag" ergeben. Schreibe eine Methode String format(Date d), die für ein beliebiges Datum eine Rückgabe in folgender Form erzeugt: "Dienstag, 4. Juli 2000". Hier das Rahmenprogramm class DateDemo { public static void main( String args[] ) { System.out.println( format( new Date(12,23,34) ) ); } public static String format( Date d ) { return d.toString(); } } <../solution.gif> Lösung import java.util.*; /** * Use the Date object to determine the weekday of your birthday. Write methods to Display * a date in format 'Freitag, 21. Januar 1969' */ class DateDemo { /** * Main method. Calls the format method to format the passed date */ public static void main( String args[] ) { System.out.println( format( new Date(69,2,21) ) ); } /** * This method returns the weekday. * @param day as integer */ public static String toDay( int day ) { switch ( day ) { case 0: return "Sonntag"; case 1: return "Montag"; case 2: return "Dienstag"; case 3: return "Mittwoch"; case 4: return "Donnerstag"; case 5: return "Freitag"; case 6: return "Samstag"; } return "<unknown day>"; } /** * This method returns the month as a string. * @param monthInt as integer */ public static String toMonth( int monthInt ) { switch ( monthInt ) { case 0: return "Januar"; case 1: return "Februar"; case 2: return "Maerz"; case 3: return "April"; case 4: return "Mai"; case 5: return "Juni"; case 6: return "Juli"; case 7: return "August"; case 8: return "September"; case 9: return "Oktober"; case 10: return "November"; case 11: return "Dezember"; default: return "<unknown month>"; } } /** * Format given date to 'Dienstag, 3. Januar 1969'. * @param d as Date object */ public static String format( Date d ) { String s; s = toDay( d.getDay() ); s = s + ", "; s = s + d.getDate(); s = s + ". "; s = s + toMonth( d.getMonth() ); s = s + " "; s = s + (d.getYear() + 1900); return s; } }