E Eiinnrriicchhtteenn vvoonn JJB Buuiillddeerr W Waarruum m JJaavvaa?? W Waarruum m JJB Buuiillddeerr?? Zu beiden Fragen jetzt kein Wort. Sinnvoller besprechen kann man sie, wenn man schon ein bisschen Erfahrung mit Java hat, außerdem sind dazu einige theoretische Erklärungen nötig. IInnssttaallllaattiioonn Die Entwicklungsumgebung JJB Buuiillddeerr PPeerrssoonnaall von B Boorrllaanndd ist für private Anwendungen frei. Auf den Schulrechnern ist sie klickbereit installiert. Wenn Sie zu Hause damit arbeiten wollen, müssen Sie zunächst JBuilder installieren. Im Pub-Verzeichnis befindet sich ein Verzeichnis Java_Install mit einem Unterverzeichnis jb9_windows (66 MByte) und einem Unterverzeichnis geierGrafik (100 kByte). Diese beiden Verzeichnisse müssen Sie irgendwie auf ihren heimischen Rechner transportieren. Wer mit einem anderen Betriebssystem arbeitet, muss die Installationsdatei selbst aus dem Internet laden. In jb9_windows finden Sie die Datei per_install.exe, die Sie starten müssen. Es öffnet sich das Installations-Fenster von JBuilder. Sie müssen ok anklicken. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 1(12.02.2005) Das Installationsprogramm läuft alleine. Sie müssen nur zu Beginn ok., dann weiter klicken. Beim Fenster mit den Lizenzbestimmungen müssen Sie Ihr Einverständnis erklären, dann weiter. … und immer weiter…..und irgendwann auf fertig klicken. Das Programm startet dann nicht selbst, Sie starten JBuilder am besten über Start… Programme. Es öffnet sich ein Registrierungsfenster. Hier Registrierungsdatei vorhanden anklicken. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 2(12.02.2005) Die Aktivierungsdatei ist im Verzeichnis jb9_windows und heißt nachricht.txt Jetzt müssen nur noch die Dateiverknüpfungen registriert werden. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 3(12.02.2005) G Geeiieerr--G Grraaffiikk ZZeeiicchheennffeelldd Das Feld, auf dem wir zeichnen werden, habe ich zunächst willkürlich auf 600 mal 600 Pixel (Bildpunkte) festgelegt. Jedes Pixel auf dem Feld hat eindeutige Koordinaten, allerdings wird nicht so gezählt wie in einem Koordinatensystem in der Mathematik, also nach rechts und nach oben, sondern wie bei der Zeilen- und Spaltenzählung bei einer Tabelle, also nach rechts und nach unten. 0,0 50,0 600,0 0,50 0,300 600,50 50,300 600,300 300,450 0,600 50,600 600,600 W Wiiee w wiirrdd ggeezzeeiicchhnneett?? Um, dem Computer zu sagen, was er zeichnen soll, haben wir eine kleine IIddeeee ddeerr ZZeeiicchhnnuunngg Werkzeugkiste, mit Anweisungen um einen Geier über den Schirm zu bewegen. Eigentlich bewegt sich eine Schildkröte. Die Idee stammt nämlich eigentlich aus dem amerikanischen Programm Logo, das ursprünglich für Vorschulkinder entwickelt wurde. Bei Logo gibt es eine Schildkröte, turtle, die über den Bildschirm gesteuert werden muss. Man kann ihr z.B. sagen bewege dich 100 Schritte vorwärts, fd(100); drehe dich um 90° nach links, lt(90); Maurer. Java mit JBuilder 9 für Einsteiger. Seite 4(12.02.2005) und gehe weiter 100 Schritte vorwärts. fd(100); Auf dem Bildschirm sieht man weder Turtle noch Geier, sondern nur die Spur, die er normalerweise hinterlässt. Die Spur kann man aber auch abschalten pu(); Man kann die Zeichenfarbe ändern, Text schreiben lassen, den Geier an einer anderen Stelle starten lassen, usw. G Grruunnddssttrruukkttuurr Alle Anweisungen zur Erstellung einer Geiergrafik werden in geschweifte Klammern eingeschlossen und durch eine so genannten Paint-Methode an das Grafik-Objekt g übergeben. Alles klar? Im Augenblick genügt es zu wissen, dass unsere Zeichenanweisungen zwischen die geschweiften Klammern dieses Ausdrucks müssen: public void paint(Graphics g) { ………….. } IInniittiiaalliissiieerruunngg ddeess G Geeiieerrss Zuerst muss man einen Geier erzeugen. Genauer gesagt: Geier ist unser Muster (In Java: Klasse) und wir erzeugen ein spezielles Exemplar vom Typ Geier. Oder in Java-Chinenisch: Wir erzeugen ein Objekt, eine Instanz der Klasse Geier. Das geht auf verschiedene Arten, die sich nur durch die Startposition unterscheiden. Wir wollen z.B. ein Dreieck zeichnen, dann erzeugen wir ein Objekt dreieck 1) Geier dreieck = new Geier(g); Start in (0 ,0) mit Blick nach rechts 2) Geier dreieck = new Geier(300,300,0,g); Start in (300 ,300) mit Blick nach rechts 3) Geier dreieck = new Geier(300,300,90,g); Start in (300 ,300) mit Blick nach oben Methoden (Werkzeuge) der Klasse Geier: Dreh Dich um soviel Grad, wie Winkel angibt, nach links. (left turn). {winkel vom Typ double} Z.B.: lt(120); rt(winkel); Dreh Dich um soviel Grad, wie Winkel angibt, nach rechts. (right turn). {winkel vom Typ double } Z.B.: rt(120); W Weerrkkzzeeuugg--kkiissttee,, fd(strecke); Bewege Dich soviel Schritte in Pfeilrichtung, wie bbeesssseerr Strecke angibt. (forward) {strecke vom Typ double} M Meetthhooddeenn--kkiissttee Z.B.: fd(200); fd(-200); Bewege Dich entgegen der Pfeilrichtung. pd(); Zeichne bei den folgenden Befehlen Deine Spur auf den Schirm. (Pen down) pu(); Zeichne bei den folgenden Befehlen Deine Spur nicht auf den Schirm. (Pen up) setColor(farbe); Zeichne bei den folgenden Befehlen Deine Spur in der Farbe farbe. {farbe vom Typ Color} Die möglichen Farben befinden sich in der Klasse Color, was das heiß später. Jedenfalls werden sie mit Color.Farbname aufgerufen: lt(winkel); Maurer. Java mit JBuilder 9 für Einsteiger. Seite 5(12.02.2005) Color.black Color.blue Color.cyan Color.darkGray Color.gray Color.green Color.lightGray Color.magenta Color.orange Color.pink Color.red Color.white Color.yellow Z. B.: farbeNeu(Color.red); goTo(x,y,winkel); Bewege den Geier an die Position (x,y) mit dem Blick in Richtung winkel ohne eine Spur zu hinterlassen. {x,y vom Typ int} [Von der Bildschirmmitte aus x Pixel nach rechts oder links, je nach Vorzeichen, y Pixel nach oben oder unten.] writeString (text); Schreibe an der aktuellen GeierPosition x,y den Text text. {Text vom Typ String, x,y vom Typ int } Z. B.: WriteString("Stern"); Der Text muss in Anführungszeichen geschrieben werden! writeStringXY (text,x,y); Schreibe an der Position x,y den Text text. {Text vom Typ String, x,y vom Typ int } Z. B.: WriteStringXY("Stern",20,200); Der Text muss in Anführungszeichen geschrieben werden! EEiinniiggee eerrssttee R Reeggeellnn ffüürr JJaavvaa-PPrrooggrraam mm mee • Groß- und Kleinschreibweise muss unterschieden werden. goto ist nicht dasselbe wie goTo • Ans Ende jeder Anweisung kommt ein Semikolon. • Man kann mehr als eine Anweisung in eine Zeile schreiben. Z.B. dreieck.fd(200); dreieck.lt(120); • Kommentare können direkt in das Programm geschrieben werden. Damit der Compiler nicht stolpert, müssen sie gekennzeichnet werden. Soll der Rest der Zeile Kommentar sein, reichen zwei Slashes // dreieck.lt(45); // Jetzt beginnt der Kommentar…… Geht der Kommentar über mehrere Zeilen, dann muss er mit /* begonnen und mit */ beendet werden. • Bei der Beschreibung der Methoden der Geiergrafik habe ich Abkürzungen wie text, x, y, usw. verwendet. Wie in der Mathematik nennt man sie Variablen. • Variablen können bei Java beispielsweise Texte oder Zahlen enthalten, Java möchte aber genau wissen, welche Art von Daten eine Variable enthalten darf. Zu diesem Zweck gibt es zahlreiche Datentypen. Drei davon sind bereits aufgetreten: int, Abkürzung von Integer, bezeichnet ganze Zahlen. double bezeichnet Fließkommazahlen, wir würden sagen Dezimalzahlen. String (Achtung groß geschrieben) bezeichnet eine Zeichenkette, also Texte. Sie müssen immer in Anführungszeichen eingeschlossen werden. Näheres aber erst in Abschnitt 3.4.1. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 6(12.02.2005) S Sttaarrtt m miitt ddeem m JJB Buuiillddeerr ggeeiieerrG Grraaffiikk--P Paakkeett iinnssttaalllliieerreenn Der JBuilder muss auf dem Rechner installiert sein. Der Start gelingt problemlos, wenn man mein vorbereitetes Paket geierGrafik irgendwo in ein Verzeichnis EigeneJavas oder so kopiert. Auf den Schulrechnern ist das schon passiert. Jeder hat das Verzeichnis geierGrafik in seinem Ordner. Zum Start des JBuilders muss man nur auf die Datei geierGrafik.jpx doppel-klicken und ein bisschen warten. Schlimmstenfalls sieht es dann auf dem Bildschirm so aus. Dann muss man die beiden Dateien Muster.html und Muster.java durch Doppel-Klicken öffnen. Jetzt sieht es auf dem Schirm so aus: Maurer. Java mit JBuilder 9 für Einsteiger. Seite 7(12.02.2005) Scrollen nach unten bringt den Bereich ins Bild, in den unsere Geier-Befehle müssen. Den Rest ignorieren wir zunächst. Beispiel Java soll uns begrüßen. Dazu ändern wir die Initialisierungszeile in Geier gruss = new Geier(200,200,0,g); weil Java jetzt grüßen soll und kein Muster ohne Wert mehr ist. Man hätte aber auch muster stehen lassen können. Wir haben jetzt also ein Objekt gruss vom Typ Geier erzeugt, das auf alle Methoden der Klasse Geier zugreifen kann. Wir lassen den Text an der aktuellen geierposition ausgeben benötigen also die Methode writeString (text); Angewandt wird sie auf das Objekt gruss, also lautet die Zeile: gruss.writeString("Hallo! Herzlich willkommen bei Java"); Jetzt soll das Applet getestet werden. Wie das geht zeigt der nächste Abschnitt: Bemerkung Man sieht der Befehl write… funktioniert nur, wenn gruss. davor steht. Mit ein bisschen Java-Chinesisch: Geier ist eine Klasse, ein Typ, der diverse Befehle kennt. gruss ist ein Objekt vom Typ Geier und verfügt daher über diese Befehle (in Java-Chinesisch, Methoden) JBuilder bietet nach dem Punkt nach gruss in einem Fenster alle Methoden an, die für Objekte der Klasse Geier zur Verfügung stehen; nämlich die, die oben im Kasten stehen. Man muss also keine Befehle auswendig lernen, man muss nur wissen, was es in Etwa gibt. TTeesstteenn ddeess A Apppplleettss W Waass iisstt eeiinn A Apppplleett?? Was wir hier gebastelt haben ist ein Applet im Unterschied zu einer Anwendung. Der entscheidende Unterschied liegt darin, dass eeiinn A Apppplleett vvoonn eeiinneem m B Brroow wsseerr ggeessttaarrtteett w wiirrdd. Es ist daher sehr einfach Zu diesem Zweck gibt es neben der java-Datei Muster.java noch eine HTML-Seite Muster.html. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 8(12.02.2005) ZZuum m TTeesstteenn des Applets, muss man zunächst das ganze Projekt aakkttuuaalliissiieerreenn. Am schnellsten mit Strg+F9. Sonst über den Menüpunkt Projekt… Dann wird die Datei Muster.html in den Vordergrund gestellt und aktualisiert durch Klicken auf das markierte Icon. A G A B E AUUUFFFG GA AB BE E1 1 Schreibe die Zeilen in das Muster-Applet, die dafür sorgen, dass der Geier auf einem Dreieck läuft. Der Grußtext soll nun etwas weiter oben geschrieben werden. Dazu verwendet man am besten die zweite Write-Methode, bei der man die Schreibposition angeben kann: writeStringXY (text,x,y). Zunächst kann man die Zeile Geier gruss…. unverändert lassen. Wenn das Applet funktioniert, kann man gruss durch dreieck ersetzen. N Neeuueess A Apppplleett Im Menü Datei wird Neu angeklickt. Das Dreiecks-Applet ist nicht so beeindruckend, dass man es unbedingt für die Ewigkeit konservieren will. Man möchte aber sicher nicht für jedes neue Applet das alte überschreiben. Um ein neues Applet zu erzeugen benötigt man zwei neue Dateien eine html-Datei zum Testen und die eigentliche Programm-Datei mit der Endung java. Damit wird das Fenster Objektgalerie geöffnet. Wir brauchen die Rubrik Web. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 9(12.02.2005) Wir wollen ein Applet erzeugen, also klicken Sie Applet. Damit wird er Applet-Experte geöffnet, der uns in 4 Schritten die beiden gewünschten Dateien erzeugt. SScchhrriitttt 11:: Hier müssen Sie den Klassenname eintragen, das ist der Name unserer javaDatei, also jetzt: Dreieck. Die java-DateiNamen beginnen im Allgemeinen mit einem Großbuchstaben. SScchhrriitttt 22:: Hier muss man gar nicht tun, außer auf Weiter zu klicken. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 10(12.02.2005) SScchhrriitttt 33:: Hier muss man wieder den Dateinamen eintragen, also jetzt Dreieck. SScchhrriitttt 44:: Und zum Schluss nochmals weiter, d.h. hier fertig stellen. A G A B E AUUUFFFG GA AB BE E2 2 Legen Sie, wie oben beschrieben, eine Datei Dreieck.html und eine Dreieck.java an. Jetzt solle ein gleichseitiges Dreieck mit einer senkrechten Seite gezeichnet werden. Variieren Sie die Farben. A G A B E AUUUFFFG GA AB BE E3 3 Legen Sie nun die Dateien Quadrat.html und Quadrat.java an. Es soll ein Quadrat gezeichnet werden. Jede Seite soll in einer anderen Farbe gezeichnet werden. Das Quadrat soll auf der Spitze stehen. A G A B E AUUUFFFG GA AB BE E4 4 Ein regelmäßiges Sechseck (siehe unten rechts) schaffen wir mit links. A G A B E AUUUFFFG GA AB BE E5 5 Etwas schwieriger ist es, ein regelmäßiges Fünfeck zeichnen zu lassen Maurer. Java mit JBuilder 9 für Einsteiger. Seite 11(12.02.2005) A G A B E AUUUFFFG GA AB BE E6 6 Wer die Herausforderung liebt, versucht den fünfzackigen Stern zu zeichnen. E Errssttee G Grruunnddssttrruukkttuurreenn V Vaarriiaabblleenn,, W Weerrttzzuuw weeiissuunnggeenn uunndd eeiinnffaacchhee R Reecchheennooppeerraattiioonneenn Mit der Anweisungsfolge dreieck.fd(200); dreieck.lt(120); dreieck.fd(200); dreieck.lt(120); dreieck.fd(200); dreieck.lt(120); erhält man ein Dreieck. Will man die Größe ändern, dann muss man dies drei Mal tun. Will man aus dem Dreieck ein Viereck machen, dann muss man überall den Winkel ändern. Das geht einfacher mit VVaarriiaabblleenn und W Weerrttzzuuw weeiissuunnggeenn. Beispiel int laenge = 200; int winkel = 120; dreieck.fd(laenge); dreieck.lt(winkel); dreieck.fd(laenge); dreieck.lt(winkel); dreieck.fd(laenge); dreieck.lt(winkel); VVaarriiaabblleenn VVaarriiaabblleenn-N Naam meenn VVaarriiaabblleenn (IIddeennttiiffiieerr) sind eigentlich Postfächer oder Schubladen, in die man bestimmte Werte ablegen kann. Die Fächer erhalten N Naam meenn (Variablenbezeichner oder Identifier) folgender Bauart: • Folge von Buchstaben, Ziffern und dem Verbindungszeichen („_“) oder jedes Währungssymbol. • Das erste Zeichen darf keine Ziffer sein. • Namen sind von Groß- und Kleinschreibung abhängig. Man beginnt üblicherweise mit einem Kleinbuchstaben, nur Klassennamen beginnen mit Großbuchstaben. Beliebt sind bei Java Großbuchstaben im Wortinnern, siehtDochHuebschAus. • Achtung! „-„ ist nicht zulässig, es wird als Minuszeichen gewertet. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 12(12.02.2005) D Daatteennttyyppeenn Zu jeder Variablen muss zunächst festgelegt (deklariert) werden, welche Art von Werte sie annehmen darf. Zunächst nur die bereits erwähnten drei Datentypen: int Abkürzung von Integer, bezeichnet ganze Zahlen. double bezeichnet Fließkommazahlen, wir würden sagen Dezimalzahlen. String (Achtung groß geschrieben) bezeichnet eine Zeichenkette, also Texte. Sie müssen immer in Anführungszeichen eingeschlossen werden. VVaarriiaabblleenn-ddeekkllaarraattiioonn VVaarriiaabblleennddeekkllaarraattiioonn IInniittiiaalliissiieerruunngg int laenge; String text; IInniittiiaalliissiieerruunngg Jede Variable muss einen Anfangswert erhalten. laenge = 200; text = "Irgend eine Kette von Zeichen"; Oder D Deekkllaarraattiioonn und IInniittiiaalliissiieerruunngg in einem Schritt: int laenge = 200; String text = "Irgend eine Kette von Zeichen"; String nochEinText =""; //Leerer String A G A B E AUUUFFFG GA AB BE E7 7 Welche der folgenden Zeichenketten sind keine erlaubten Identifier? a) a2z b) ödipus c) 52pickup d) _class e) ca$h f) total# W Weerrtt--zzuuw weeiissuunngg W Weerrttzzuuw weeiissuunngg zahl = 5; gibt der Variablen zahl den Wert 5. a = a +1; erhöht den Wert der Variablen a um 1. Das geht bei Java auch einfacher. a++; erhöht den Wert von a ebenfalls um 1. a--; verringert den Wert von a ebenfalls um 1. Damit sind wir schon bei einfachen Rechenoperationen. EEiinnffaacchhee R Reecchhnnuunnggeenn ++,, --,, **,, // ++ bbeeii SSttrriinnggss TTyyppeennuum m-w waannddlluunngg Mit den Variablen vom Typ int und double kann man wie gewohnt rechnen. Rechenzeichen sind +, -; *, / , den Inkrementoperator ++, den Dekrementoperator --. Vorsicht mit den Datentypen! int verknüpft mit int liefert int! Auch bei der Division! double verknüpft mit int oder double liefert double Beispiele: 3 + 2 = 5, aber 3.0 + 2 = 5.0 3 / 2 = 1, aber 3.0 / 2 = 1.5 String-Variablen kann man mit + aneinander hängen. String text1 = "Kuno"; String text2 = "Erkelbrecht"; text1+text2; ergibt "KunoErkelbrecht. Mit dem + kann man int-und double-Werte in String-Werte umwandeln. int zahl = 5; //Typ int ""+zahl; // Typ String. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 13(12.02.2005) Wir benötigen diese Typenumwandlung bei unserem write-Befehl. Der lässt uns ja nur Strings schreiben. writeStringXY(5,100,100); // geht schief writeStringXY(""+5,100,100); // klappt! A G A B E AUUUFFFG GA AB BE E8 8 Ändern Sie das Applet Sechseck ab, indem Sie Variabeln verwenden. A G A B E AUUUFFFG GA AB BE E9 9 Legen Sie ein Applet Rechnen.java an. Erzeugen Sie ein Objekt rech. Geben Sie die folgenden Anweisungen ein int a = 3; int b = 5; String text1 = "sehr "; String text2 = "gut"; rech.writeStringXY(""+a,100,100); rech.writeStringXY(""+b,100,150); rech.writeStringXY(""+a+b,100,200); a) Ersetzen Sie a+b durch a*b, durch a/b, durch a++, durch b--. b) Variieren Sie die Werte von a und b. c) Jetzt ergänzen Sie rech.writeStringXY(text1,200,100); rech.writeStringXY(text2,200,150); rech.writeStringXY(text1+text2,200,200); d) Was schreiben die beiden folgenden Zeilen auf den Schirm? Überlegen Sie zuerst und probieren Sie dann: rech.writeStringXY(""+3+6,250,100); rech.writeStringXY(3+6+"",250,150); Und was passiert, wenn man 3 durch 3.5 ersetzt. FFoorr--S Scchhlleeiiffeenn Störend ist jetzt immer noch, dass man beim Sechseck sechs Mal dieselben Befehle schreiben muss. Beim Gedanken an ein 360-Eck kommt einem das Grausen. – Muss es aber nicht, es gibt eine Struktur, mit der man Wiederholungen programmieren kann. Beispiel SSyynnttaaxx ddeerr ffoorr--SScchhlleeiiffee int laenge = 100; int winkel = 60; for (int i=0;i<6;i++) { sechseck.fd(laenge); sechseck.lt(winkel); } Zunächst ist i = 0, die beiden Anweisungen in der geschweiften Klammer werden ausgeführt, dann wird i um 1 erhöht, also i = 1, die beiden Befehle werden wieder ausgeführt, i wird auf 2 erhöht usw. for (<Initialisierung>;<Abbruchbedingung>;<Änderung>) { Anweisung1; Anweisung2; … } Zunächst muss die Zählvariable initialisiert werden, beim Beispiel wurde hier auch i deklariert, das kann man aber auch vorher erledigen es folgt eine Abbruchbedingung und schließlich muss angegeben werden, wie die Zählvariable verändert werden soll. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 14(12.02.2005) A G A B E AUUUFFFG GA AB BE E1 100 Beispiel Legen Sie ein neues Applet mit dem Namen Vieleck an. Verwenden Sie eine for-Schleife. a) Zunächst ein Achteck. b) Jetzt ein 60-Eck. c) Nun soll ein beliebiges n-Eck gezeichnet werden. Schreiben Sie die folgende Zeile vor die for-Schleife. int n = 8; // Anzahl der Ecken Der Drehwinkel muss passend zu n berechnet werden. int winkel = ??; Bei n = 3 war der winkel = 120 bei n = 4 war der winkel = 90 bei n = 5 war der winkel = 72 bei n = 6 war der winkel = 60. Bei beliebigem n gilt winkel = ?. d) Testen Sie das Applet. Was beobachten Sie bei n = 150? Woran liegt es? Wie kann man das Problem beseitigen. Hinweis: Schauen Sie in den vorigen Abschnitt, 3.4.1. Man kann mit Schleifen mehr machen als einfach nur dieselben Befehle wiederholen. Es sollen die Zahlen von 1 bis 10 addiert werden, z.B. im Applet Rechnen. Dazu erzeugen wir das Objekt sum int n = 10; int sum = 0; int y=0; int x = 10; for (int i=1;i<=n;i++) { sum = sum +i;// Der Wert von sum wird um i erhöht y = y + 20; // y-Schreib-Position. Zeilenhöhe = 20 Pixel sum.writeStringXY(sum+"",10,y); } A G A B E AUUUFFFG GA AB BE E1 111 Füllen Sie das folgende Ablaufprotokoll des Applets aus: n i sum x 10 1 1 10 A G A B E AUUUFFFG GA AB BE E1 122 Legen Sie ein Applet Blumen an. Erzeugen Sie ein Objekt blume1. double laenge; Die Blume wird erzeugt durch Striche, die vom Mittelpunkt ausgehen, d.h. man geht immer wieder zum Mittelpunkt zurück und dreht ein Stückchen weiter, z.B. 1° mit blume1.goTo(200,200,…??…) Die Länge der Striche wird über laenge*blume1.sin(2*i) oder laenge*blume1.sin(3*i) usw. Siehe Werkzeugkiste. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 15(12.02.2005) y 20 A G A B E AUUUFFFG GA AB BE E1 133 Man kann auf dieselbe Weise weitere Blumen-Objekte blumen2, blumen3 usw. erzeugen. W Wüürrffeellnn m miitt JJaavvaa Mit Java kann man auch würfeln. Dazu gibt es einen Befehl in der Bibliothek Math, die uns in Java zur Verfügung steht. ZZuuffaalllsszzaahhlleenn erzeugt Zufallszahlen zwischen 0 und 1 Math.random(); double zahl; zahl = 6*Math.random(); erzeugt Zufallszahlen zwischen 0 und 1 (int)Math.ceil(zahl); macht daraus Zufallszahlen zwischen 1 und 6 Bemerkung M Maatthh..cceeiill Beispiel A Apppplleett ZZuuffaalll Math.random(); liefert eine Zahl vom Typ double, also eine Dezimalzahl. Nach Multiplikation mit 6 erhält man immer noch eine Dezimalzahl. Die liegt dann zwischen 0,0.. und 6. Rundet man in der üblichen Weise, erhält man Zahlen zwischen 0 und 6. In der Bibliothek Math gibt es aber etwas passendes für diesen Fall, nämlich Math.ceil(); ceil rundet immer auf, d.h. ceil(0.1) ergibt ebenso 1.0 wie ceil(0.99). Allerdings ist das Ergebnis immer noch eine Zahl vom Typ double, falls man eine Zahl vom Typ int benötigt, ist wieder eine Typenumwandlung fällig. Das geht ganz bequem durch vorangestelltes (int). Diese Art der Typenumwandlung nennt man neudeutsch casten. Um sich den Effekt anzuschauen, legen wir ein neues Applet Zufall an mit den Zeilen: Geier zufall = new Geier(200,200,0,g); double zahl = Math.random(); int natZufallsZahl = (int) Math.ceil(6*zahl); zufall.writeStringXY(""+zufallsZahl ,100,200); zufall.writeStringXY(""+natZufallsZahl ,100,250); A G A B E AUUUFFFG GA AB BE E1 144 Lotto Schreiben Sie ein Applet, das 6 Zahlen aus 49 auswählt. Man kann die Zahlen z. B. unter die Überschrift Lotto-Zahlen in eine Zeile schreiben. Zum Beispiel so: Lotto-Zahlen 45 7 13 33 21 40 Testen Sie das Programm. Dabei werden Sie zuweilen Ergebnisse erhalten, die so bei der wirklichen Lotto-Ziehung nicht auftreten werden. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 16(12.02.2005) iiff--A Annw weeiissuunnggeenn Aus Excel kennen wir die Wenn-Bedingung. Eine solche Anweisung besitzt auch Java, sie heißt if-Anweisung. Positive und negative Zahlen sollen erkannt werden. Beispiel if (zahl > 0) plusMinus ="plus"; else plusMinus ="minus"; // Die 0 ist hier auch minus. Naja! if (Bedingung) Anweisung; else Anweisung; SSyynnttaaxx ffüürr ddiiee IIff--A Annw weeiissuunngg Wenn mehr als eine Anweisung ausgeführt werden sollen, müssen sie in geschweifte Klammern eingeschlossen werden. if (Bedingung) { Anweisung; Anweisung;… } else { Anweisung; Anweisung;… } Bemerkung < bedeutet: kleiner als <= bedeutet: kleiner oder gleich > bedeutet: größer als >= bedeutet: größer oder gleich Zuweilen müssen mehrer Bedingungen verknüpft werden, dazu gibt es die logischen Verknüpfungen: & bezeichnet "und" | bezeichnet "oder" | bekommt man mit ALT GR + A G A B E AUUUFFFG GA AB BE E1 155 Legen Sie ein Applet Noten.java an, das Notenpunkte würfelt und den Notennamen dazu angibt. Hinweis: Zunächst werden Zahlen zwischen 0 und 15 gewürfelt. double zahl = 16*Math.random()-1; int np = (int)Math.ceil(zahl); if ((np < 13)&(np > 9)) notenName = "gut"; noten.writeStringXY(np+" Noten-Punkte: "+notenName ,50,200); A G A B E AUUUFFFG GA AB BE E1 166 Erzeugen Sie ein Applet Max, das zwei Zahlen zwischen 0 und 100 würfelt und die größere ausgibt. Ausgabetext, wenn z.B. 15 und 21 gewürfelt wurden: 15, 21 A G A B E AUUUFFFG GA AB BE E1 177 Die größere Zahl ist 21. Erweitern Sie das Applet Max so, dass n mal ganze Zahlen zwischen 1 und 6 gewürfelt werden, mit beispielsweise n = 100. Das Applet soll den Anteil der 6er angeben. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 17(12.02.2005) ssw wiittcchh--A Annw weeiissuunngg Beim Beispiel Noten musste man eine ganze Serie von if-Anweisungen hintereinander hängen. Für solche Fälle gibt es eine einfacherer Struktur, die switch-Anweisung. Beispiel Umrechnung von Notenpunkte in Notennamen: double zahl = Math.random(); int notenZahl=(int)Math.ceil(16*zahl)-1;//Notenpunkte String notenName=""; switch (notenZahl) { case 15: case 14: case 13: notenName = "sehr gut"; break; case 12: case 11: case 10: notenName = "gut"; break; case 9: case 8: case 7: notenName = "befriedigend"; break; case 6: case 5: case 4: notenName = "ausreichend"; break; case 3: case 2: case 1: notenName = "mangelhaft"; break; case 0: notenName = "ungenügend"; break; default: notenName = "falsche Eingabe"; } noten.writeStringXY(notenZahl+ " Notenpunkte entsprechen der Note "+ notenName,10,100); Erläuterung Die Variable notenZahl erhält einen zufälligen Wert zwischen 0 und 15. In der switch-Anweisung wird der Wert von notenZahl geprüft. Hat notenZahl z.B. den Wert 15, dann wird zunächst zu case 15 gesprungen, da dort kein break ist, wird zu case 14 und dann zu case 13 gesprungen. Dort erhält notenName den Wert "sehr gut". Es folgt ein break, d.h. es wird aus der switch-Anweisung herausgesprungen. Hat notenZahl z.B. den Wert 4, dann wird zu case 4 gesprungen. Dort findet sich eine Anweisung und sofort ein break, d.h. die Anweisung wird nach case 4 verlassen. Hätte notenZahl einen Wert außerhalb des Bereichs 0 bis 15, dann findet sich keine passende case-Anweisung, das ist der Default-Fall. Hier kann der nicht eintreten. Man kann aber natürlich die WürfelAnweisung so abändern, dass Werte etwa bis 20 auftreten können, dann wird der Defaultfall eintreten. A U F G A B E AU UF FG GA AB BE E 1188 Schreibe ein Programm Noten2 das Noten zwischen 1 und 6 würfelt und den Notennamen ausgibt. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 18(12.02.2005) A U F G A B E AU UF FG GA AB BE E 1199 int zahl = 3; double wert=0; switch (zahl) { case 1: wert = 0.1; case 2: wert = 0.2; case 3: wert = 0.3; case 4: wert = 0.4; case 5: wert = 0.5; case 6: wert = 1.5; default:wert = 0; }; Welchen Wert hat wert nach der Switch-Anweisung? a) 0.3; b) 1.5; c) 3; d) 0 A U F G A B E AU UF FG GA AB BE E 2200 Schreiben Sie ein Programm das einen Entschuldigungssatz ausgibt, "Leider konnte ich wegen einer Autopanne nicht zum Unterricht kommen." Dabei soll der Entschuldigungsgrund aus 5 Varianten ausgewürfelt werden. A U F G A B E AU UF FG GA AB BE E 2211 Schreiben Sie ein Programm, das n=10 Dreiecke zeichnet und die Farben dabei auswürfelt. Hinweis: Die Position der Dreiecke kann man z.B. so wählen: x = 50+40*i; y = 50+40*i; Die Farbzuweisung erfolgt (siehe Seite 5) über ….setColor(Color.black); Zur Farbauswahl bildet man eine Zufallszahl, z.B. zwischen 1 und 7, und ordnet dann mit einer Switch-Anweisung jeder zahl eine Farbe zu. A Apppplleett iinnss IInntteerrnneett.. E Errzzeeuugguunngg eeiinneerr jjaarr--D Daatteeii Maurer. Java mit JBuilder 9 für Einsteiger. Seite 19(12.02.2005) In Schritt 3 bis 5 wird nur noch weiter bzw fertigstellen geklickt. Die JAR-Datei geierGrafi.jar wird dann bei der nächsten ProjektAktualisierung erzeugt. Diese Datei ist eine Archiv-Datei, sie enthält in komprimierter Form alle Applets des package geierGrafik. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 20(12.02.2005) Man findet sie im Verzeichnis: /geierGrafik/classes Gestartet werden die Applets über die jeweilige html-Datei. Beispiel Das Applet Blumen soll ins Internet gestellt werden. Dazu benötigt man zwei Dateien: geierGrafi.jar und Blumen.html Mit dieser html-Datei hatten wir bisher unsere Programme getestet. Dazu wurde sie im Ansichts-Modus betrachtet. Jetzt muss die Quelle betrachtet werden. In diesem Screen-Shot sieht man auch die Änderung, die man vornehmen muss. Die Zeile archive = "geierGrafik.jar" muss eingeschoben werden. Achtung: Auf Groß- und Kleinschreibung achten. SSttaarrtteenn ddeess A Apppplleettss Doppelklickt man jetzt im Explorer auf den Dateinamen Blumen.html, dann wird das Applet aus dem Browser heraus gestartet. Auf diese Weise kann man ein Applet leicht ins Internet stellen, man muss es nur auf einen Server hochladen oder mir geben. Beispiel: http://www.kk.s.bw.schule.de/inf12/java/JavaBeispiele.html Jetzt kommt gleich die eigentliche Stärke des JBuilders zum Einsatz. Maurer. Java mit JBuilder 9 für Einsteiger. Seite 21(12.02.2005)