Montag, 21. Januar 2013
Übung zu Arrays in Java (POS1: 2BHIF)
Erzeugen Sie eine Klasse
DreieckArray
, welche ein privates zweidimensionales Array feld
für Integers enthält. Dieses Feld soll "dreieckig" sein und mit folgenden Werten initialisiert werden:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
Die Methoden sind public und sollen folgendes tun:
void create(int zeilen, int spalten)
soll ein neues Feld mit den gegebenen Zeilen und Spalten erzeugen (rechteckig).int[][] getArray()
soll das Feld zurückliefern.int[] summen()
soll ein eindimensionales Feld mit den Zeilensummen liefern.boolean set(int zeile, int spalte, int wert)
soll den Wert an der gegebenen Stelle im Feld feld setzen und bei erfolg true zurückliefern. Bei ungültigen Indizes soll false zurückgeliefert werden.
Schreiben Sie eine Klasse
TestDreieckArray
, in der zwei Objekte von DreieckArray in der Methode main()
angelegt werden. Machen Sie zum Testen passende Aufrufe der Methoden (z.B. gültige und ungültige set()
usw.).Mittwoch, 16. Januar 2013
Java zeichnen mit Swing (POS1: 3BHIF)
Abgabename: 2012_3bhif_aufgabe6_Name_Vorname.tgz
Vervollständigen Sie die Zeichen-Applikation aus der letzten Aufgabe so, dass das hier ersichtliche Verhalten ermöglicht wird (Sie benötigen ein Java-Plugin für den Browser):
Das Applet ist nicht perfekt, aber die wichtigste Funktionalität ist vorhanden.
Beachten Sie, dass sich Knoten nicht überlappen dürfen.
Das Fenster soll ein Menü mit
Im
Erstellen Sie eine Liste der (Teil-)Aufgaben und schätzen Sie den Aufwand.
Stellen Sie sich Fragen wie:
Vervollständigen Sie die Zeichen-Applikation aus der letzten Aufgabe so, dass das hier ersichtliche Verhalten ermöglicht wird (Sie benötigen ein Java-Plugin für den Browser):
Das Applet ist nicht perfekt, aber die wichtigste Funktionalität ist vorhanden.
- Linke Maustaste zum Erzeugen und verschieben von Knoten.
- Mittlere Maustaste zum Löschen von Knoten.
- Rechte Maustaste (ziehen) zum Zeichnen von Kanten zwischen den Knoten.
Beachten Sie, dass sich Knoten nicht überlappen dürfen.
Das Fenster soll ein Menü mit
File
und Help
haben.
Im
File
-Menü sollen folgende Funktionen ausgewählt werden können:
New
zum Anlegen eines neuen Graphen (löscht Zeichenfläche).Save
undSave as...
zum Speichern des Graphen (Sie können die Funktionalität zunächst weglassen).Exit
zum beenden.
Help
-Menu soll einen Eintrag mit About
haben, mit dem ein Info-Dialog geöffnet werden soll. Dieser Dialog soll Name, Klasse, eine Kurzbeschreibung des Programmes und eine Versionsnummer enthalten.
Erstellen Sie eine Liste der (Teil-)Aufgaben und schätzen Sie den Aufwand.
Stellen Sie sich Fragen wie:
- Welche Bereiche sind wichtig?
- Wo werden wahrscheinlich Probleme auftreten?
- Welche Teile könnte man vereinfachen?
Die Pfeile sind möglicherweise kompliziert, aber es ist wichtig, die Richtung der Kanten irgendwie zu kennzeichnen.
Labels: Aufgabe, GUI, Java, POS1-3
Mittwoch, 9. Januar 2013
Java Grafik/GUI (POS1: 3BHIF)
Einfache Grafik
Schreiben Sie eine Klasse
Verwenden Sie eine Liste (
Experimente mit Swing-Komponenten
Alle Steuerelemente von Swing (
Im
Damit wird im aktuellen Verzeichnis ein Projektverzeichnis
Das Projekt wird eventuell um neue Klassen ergänzt. Sie können sich die Änderungen holen:
Sollten Sie nicht auf einem Schul-PC das Repository klonen wollen, dann müssen Sie das Verzeichnis erst "mounten" und dann klonen:
Neue Versionen bekommen Sie sinngemäß mit
Zurück zu den Steuerelementen/JavaBeans.
Im Projekt
Das sieht etwa folgendermaßen aus:
Sie können auch mehrere Steuerelemente auf der Kommandozeile angeben. Z.B.:
Experimentieren Sie mit weiteren Steuerelementen (A Visual Guide to Swing Components).
Experimentieren Sie mit folgender Klasse. Sie zeigt die Verschachtelung verschiedener Container:
Im package
Ein Beispiel für das GroupLayout finden Sie in
Verwenden Sie diese Beispiele als Basis für eigene Projekte!
Schreiben Sie eine Klasse
PaintQuadrats
, welche in einem Fenster (JFrame) eine Reihe von Quadraten zeichnet, die fortlaufend nummeriert sind:
Verwenden Sie eine Liste (
ArrayList
oder ein Feld) von Knoten (Node
), die "sich zeichnen" (paint(Graphics g)
) können. In der Methode paintComponents(Graphics g)
des JPanels
müssen dann für alle Knoten deren paint()
-Methode aufgerufen werden.
Experimente mit Swing-Komponenten
Alle Steuerelemente von Swing (
javax.swing.*
) und AWT können auch als sogenannte Java Beans verwendet werden und damit auch dynamisch geladen werden. Eine JavaBean besitzt immer einen Standardkonstruktor. Dies ermöglicht eine standardisierte Instanzierung (vgl. Java Beans).
Im
public/3bhif/java-gui-experiments/.hg
finden Sie ein Mercurial Repository, welches ein Eclipse-Projekt mit den nötigen Klassen für die folgenden Beispiele enthält. Sie können in der Schule das Repository einfach klonen:
$ hg clone /home/teachers/hp/public/3bhif/java-gui-experiments Zielverzeichnis: java-gui-experiments Aktualisiere auf Zweig default 25 Dateien aktualisiert, 0 Dateien zusammengeführt, 0 Dateien entfernt, 0 Dateien ungelöst $
Damit wird im aktuellen Verzeichnis ein Projektverzeichnis
java-gui-experiments
erzeugt.
Das Projekt wird eventuell um neue Klassen ergänzt. Sie können sich die Änderungen holen:
$ cd java-gui-experiments $ hg pull /home/teachers/hp/public/3bhif/java-gui-experiments Hole von /home/teachers/hp/public/3bhif/java-gui-experiments Suche nach Änderungen Keine Änderungen gefunden $
Sollten Sie nicht auf einem Schul-PC das Repository klonen wollen, dann müssen Sie das Verzeichnis erst "mounten" und dann klonen:
$ mkdir ~/edvossh $ sshfs user@edvossh.htlwrn.ac.at:/home/teachers/hp/public/3bhif ~/edvossh $ hg clone ~/edvossh/java-gui-experiments Zielverzeichnis: java-gui-experiments Aktualisiere auf Zweig default 25 Dateien aktualisiert, 0 Dateien zusammengeführt, 0 Dateien entfernt, 0 Dateien ungelöst $
user
ist natürlich mit Ihrem Usernamen in der Schule zu ersetzen. Die Eingabe des Passworts ist in obigen Beispielen nicht angezeigt,
Neue Versionen bekommen Sie sinngemäß mit
hg pull
ins lokale Repository.
Zurück zu den Steuerelementen/JavaBeans.
Im Projekt
java-gui-experiments/bin
können Sie Klassen nun aufrufen. Ein Beispiel zum Demonstrieren eines JButtons mit der Beschriftung "Hello World!" in einer 48 Punkt Schriftart:
$ cd java-gui-experiments/bin/ $ java je3.gui.ShowBean javax.swing.JButton 'text=Hello World!' font=helvetica-bold-48
Das sieht etwa folgendermaßen aus:
Sie können auch mehrere Steuerelemente auf der Kommandozeile angeben. Z.B.:
$ cd java-gui-experiments/bin/ $ java je3.gui.ShowBean javax.swing.JButton 'text=Hello World!' font=helvetica-bold-48\ javax.swing.JRadioButton 'text=pick me'\ java.awt.Button label=Hello javax.swing.JSlider
Experimentieren Sie mit weiteren Steuerelementen (A Visual Guide to Swing Components).
Experimentieren Sie mit folgender Klasse. Sie zeigt die Verschachtelung verschiedener Container:
package je3.gui; import javax.swing.*; import java.awt.*; /** * A component subclass that demonstrates nested containers and components. * It creates the hierarchy shown below, and uses different colors to * distinguish the different nesting levels of the containers * * Containers---panel1----button1 * | |---panel2----button2 * | | |----panel3----button3 * | |------panel4----button4 * | |----button5 * |---button6 */ public class Containers extends JPanel { public Containers( ) { this.setBackground(Color.white); // This component is white this.setFont(new Font("Dialog", Font.BOLD, 24)); JPanel p1 = new JPanel( ); p1.setBackground(new Color(200, 200, 200)); // Panel1 is darker this.add(p1); // p1 is contained by this component p1.add(new JButton("#1")); // Button 1 is contained in p1 JPanel p2 = new JPanel( ); p2.setBackground(new Color(150, 150, 150)); // p2 is darker than p2 p1.add(p2); // p2 is contained in p1 p2.add(new JButton("#2")); // Button 2 is contained in p2 JPanel p3 = new JPanel( ); p3.setBackground(new Color(100, 100, 100)); // p3 is darker than p2 p2.add(p3); // p3 is contained in p2 p3.add(new JButton("#3")); // Button 3 is contained in p3 JPanel p4 = new JPanel( ); p4.setBackground(new Color(150, 150, 150)); // p4 is darker than p1 p1.add(p4); // p4 is contained in p1 p4.add(new JButton("#4")); // Button4 is contained in p4 p4.add(new JButton("#5")); // Button5 is also contained in p4 this.add(new JButton("#6")); // Button6 is contained in this component } }
Im package
je3.gui
finden Sie ein paar Klassen *Layout*
, welche die verschiedenen Layoutmanager demonstrieren. Dokumentation finden Sie hier: Lesson: Laying Out Components Within a Container
Ein Beispiel für das GroupLayout finden Sie in
layout.Find
, welches etwa so aussieht:
Verwenden Sie diese Beispiele als Basis für eigene Projekte!
Labels: Aufgabe, Java, POS1-3, User Interface
Montag, 7. Januar 2013
Java Array, Input (POS1: 2BHIF)
Folgende Klassen zeigen die Eingabe von ganzen Zahlen auf der Kommandozeile und die Berechnung der Fakultät mit Hilfe eines Arrays, in dem schon berechnete Fakultäten gecached werden. Außerdem sehen Sie die Verwendung von Exceptions (werfen und abfangen).
Erzeugen Sie ein Projekt mit den beiden Klassen, die in den folgenden Listings zu sehen sind.
Die Listings sind bewusst nur Grafiken, damit Sie auch den Umgang mit der Entwicklungsumgebung üben.
Erzeugen Sie ein Projekt mit den beiden Klassen, die in den folgenden Listings zu sehen sind.
Die Listings sind bewusst nur Grafiken, damit Sie auch den Umgang mit der Entwicklungsumgebung üben.
Sonntag, 6. Januar 2013
Aufgabe Java Wurzelberechnung (POS1: 2BHIF)
Man kann die Wurzel einer Zahl berechnen mit folgender Formel
xn = (xn-1 + a / xn-1) / 2
Man beginnt damit, dass a und x0 gleich der Zahl, aus der man die Wurzel ziehen will, setzt und x1 berechnet. Dann berechnet man x2 usw. bis sich die beiden letzten Werte nur mehr gering unterscheiden (z.B. die Differenz kleiner 0,0000001 ist).
Schreiben Sie eine Methode (Funktion)
Erstellen Sie eine Klasse SquareRoot
Stellen Sie fest, wie viele Iterationen benötigt werden. Wie kann man die Anzahl der Iterationen bestimmen, ohne die Parameter bzw. den Returntyp bzw. -wert von wurzel(zahl, genauigkeit) zu ändern?
xn = (xn-1 + a / xn-1) / 2
Man beginnt damit, dass a und x0 gleich der Zahl, aus der man die Wurzel ziehen will, setzt und x1 berechnet. Dann berechnet man x2 usw. bis sich die beiden letzten Werte nur mehr gering unterscheiden (z.B. die Differenz kleiner 0,0000001 ist).
Schreiben Sie eine Methode (Funktion)
wurzel(zahl, genauigkeit)
, welche nach obigem Verfahren die Wurzel berechnet.Erstellen Sie eine Klasse SquareRoot
.java
, welche eine Tabelle der Wurzeln der Zahlen 1 bis 20 bei den Genauigkeiten 0.01, 0.0001 sowie 0.0000001 ausgibt:1: 1.0000000 1.0000000 1.0000000 2: 1.4142157 1.4142136 1.4142136 3: 1.7320508 1.7320508 1.7320508 4: 2.0000001 2.0000000 2.0000000 5: 2.2360689 2.2360680 2.2360680 6: 2.4494944 2.4494897 2.4494897 7: 2.6457670 2.6457513 2.6457513 8: 2.8284271 2.8284271 2.8284271 9: 3.0000000 3.0000000 3.0000000 10: 3.1622777 3.1622777 3.1622777 11: 3.3166248 3.3166248 3.3166248 12: 3.4641017 3.4641016 3.4641016 13: 3.6055514 3.6055513 3.6055513 14: 3.7416576 3.7416574 3.7416574 15: 3.8729837 3.8729833 3.8729833 16: 4.0000006 4.0000000 4.0000000 17: 4.1231067 4.1231056 4.1231056 18: 4.2426425 4.2426407 4.2426407 19: 4.3589018 4.3588989 4.3588989 20: 4.4721402 4.4721360 4.4721360
Stellen Sie fest, wie viele Iterationen benötigt werden. Wie kann man die Anzahl der Iterationen bestimmen, ohne die Parameter bzw. den Returntyp bzw. -wert von wurzel(zahl, genauigkeit) zu ändern?
Abgaben im Schuljahr 2012/13
Bei den Abgabenamen jjjj_Nbhif_aufgabeN_name_vorname.tgz wird für das Schuljahr 2012/13 weiterhin jjjj durch 2012 ersetzt, auch wenn wir bereits das Jahr 2013 haben. Siehe auch Abgaben (POS1: 2BHIF, 3BHIF).
Sollten wir auch im Schuljahr 2013/14 kein brauchbares zentrales Repository haben, dann werden wir Dateinamen mit 2013 im Namen haben...
Sollten wir auch im Schuljahr 2013/14 kein brauchbares zentrales Repository haben, dann werden wir Dateinamen mit 2013 im Namen haben...
Labels: allgemeines, Aufgabe, POS1-2, POS1-3
Abonnieren Posts [Atom]