Quoted
Original von Wanja
Hat sich schon jemand damit befasst?
Ich raff das mit dem Iterator nicht ganz....
Das interface Set verlangt eine Implementation von iterator()
Nunja also hab ich das Ding mal soweit vollbracht:
public java.util.Iterator iterator()
{}
Kann mir vielleicht einer sagen wie ich den Rumpf
implementieren kann?
*steh auf dem Schlauch*
Quoted
Lernziele: Exceptions, Collections-Framework
Implementieren Sie die in der Vorlesung vorgestellte Klasse Bit32Set:
(1) Implementieren Sie dabei das Set-Interface.
(2) Jede Instanz von Bit32Set kann eine Teilmenge von {0, . . . , 31} repräsentieren.
(3) Eine solche Menge wird durch eine int-Variable repräsentiert: enthaltene Elemente sind gesetzte Bits, nicht
enthaltene gelöschte. Die Menge {0, 1, 31} hat also die Darstellung 100...0011.
(4) Alle Mengenoperationen sollen effizient durch durch Bit-Operatoren implementiert werden.
(5) Beschränken Sie Methoden wie addAll auf Argumente vom selben Typ Bit32Set, Methoden wie add auf
Integer.Werfen Sie ggf. eine ClassCastException. Den Typ des Arguments können Sie mittels instanceof-
Operator testen: o instanceof Integer ist genau dann true, wenn o Instanz der Klasse Integer ist.
(6) Überprüfen Sie bei Methoden wie add zusätzlich den Wertebereich 0 < x < 31, werfen Sie ggf. eine
IllegalArgumentException.
This post has been edited 1 times, last edit by "Cpt. Iglu" (Jun 5th 2004, 2:05am)
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Wahrscheinlich, weil man diese Methode nicht für die Aufgabe benötigt. In Punkt 3 steht zudem, daß man eine int-Variable (also kein BitSet) benutzen soll.
Quoted
Original von Cpt. Iglu
Auszug aus der Aufgabe:
Quoted
Lernziele: Exceptions, Collections-Framework
Implementieren Sie die in der Vorlesung vorgestellte Klasse Bit32Set:
(1) Implementieren Sie dabei das Set-Interface.
(2) Jede Instanz von Bit32Set kann eine Teilmenge von {0, . . . , 31} repräsentieren.
(3) Eine solche Menge wird durch eine int-Variable repräsentiert: enthaltene Elemente sind gesetzte Bits, nicht
enthaltene gelöschte. Die Menge {0, 1, 31} hat also die Darstellung 100...0011.
(4) Alle Mengenoperationen sollen effizient durch durch Bit-Operatoren implementiert werden.
(5) Beschränken Sie Methoden wie addAll auf Argumente vom selben Typ Bit32Set, Methoden wie add auf
Integer.Werfen Sie ggf. eine ClassCastException. Den Typ des Arguments können Sie mittels instanceof-
Operator testen: o instanceof Integer ist genau dann true, wenn o Instanz der Klasse Integer ist.
(6) Überprüfen Sie bei Methoden wie add zusätzlich den Wertebereich 0 < x < 31, werfen Sie ggf. eine
IllegalArgumentException.
Meine Meinung zu den einzelnen Aufgabenpunkten:
zu 1.: Klar und deutlich formuliert.
zu 2.: Klar und deutlich formuliert.
zu 3.: Hier geht es los. Binäre Ausgabe in Java geht so: Integer.toBinaryString(). Wieso steht das nicht in der Aufgabenstellung?
Schau Dir mal die API-Dokumentation zum Set-Interface an.
Quoted
zu 4.: Hilft mir nicht weiter. Ich es wäre besser, wenn die Methoden klar aufgelistet sind. Ich finde, es ist nicht meine Aufgabe zu überlegen welche Aufgaben meine Klasse erfüllen soll. Das ist nicht Sinn der OOP,
die Aufgabenstellung muss Planung/Design verdeutlichen, das coden ist nur Implementation. Ein UML Diagramm würde helfen, zumindest aber sollte die Aufgabenstellung sämtliche(!) geforderten Methoden namentlich auflisten.
Sehe ich anders. Wenn ich keine vernünftige Ausgabe erzeugen kann, welchen Sinn hätte dann die ganze Klasse? Überhaupt wie bitte kommst Du sonst auf diese Ausgabe: Darstellung 100...0011? Die int-Variable bietet sich ja gerade deshalb an, 32 Bit DTs werden langsam rar
Quoted
Wahrscheinlich, weil man diese Methode nicht für die Aufgabe benötigt. In Punkt 3 steht zudem, daß man eine int-Variable (also kein BitSet) benutzen soll.
Hmm, schon wieder? Was glaubst Du wie ich programmiere?
Quoted
Schau Dir mal die API-Dokumentation zum Set-Interface an.
Das ist Deine Meinung, definitiv nicht meine! Im Gegenteil, ohne klare Eingrenzung der Aufgabe hilft mir die API nichts. So gut ist sie dann doch nicht.
Quoted
Ich sehe es aber durchaus als sinnvoll an, in der Aufgabe nicht nur das Coden zu verlangen, sondern sich auch über das Design Gedanken zu machen.
This post has been edited 1 times, last edit by "Cpt. Iglu" (Jun 5th 2004, 12:12pm)
Quoted
Original von Cpt. Iglu
[Hmm, schon wieder? Was glaubst Du wie ich programmiere?
Quoted
Schau Dir mal die API-Dokumentation zum Set-Interface an.Sieh her...
java.util.BitSet:
- BitSet( int nBits)
- int length()
- bool get( int bit), void set( int bit), void clear(int bit)
- void and(BitSet set), or(BitSet set), xor(BitSet set) andNot(BitSet set)
Quoted
Original von Cpt. Iglu
Überhaupt wie bitte kommst Du sonst auf diese Ausgabe: Darstellung 100...0011?
Quoted
Hmm, schon wieder? Was glaubst Du wie ich programmiere?
Quoted
Schau Dir mal die API-Dokumentation zum Set-Interface an.Sieh her...
Quoted
Damit bin ich aber soweit glücklich. Wie ich auf BitSet gekommen bin? Nun es wird aus dem Java Lager gerne aufgegriffen, weil das JSDK hier besonders effektiver als die vergleichbare Cpp Implementation arbeitet.
Der Benchmark schwebte mir halt noch im Hinterkopf rum.
Quoted
Das ist Deine Meinung, definitiv nicht meine! Im Gegenteil, ohne klare Eingrenzung der Aufgabe hilft mir die API nichts. So gut ist sie dann doch nicht.
Quoted
Ich sehe es aber durchaus als sinnvoll an, in der Aufgabe nicht nur das Coden zu verlangen, sondern sich auch über das Design Gedanken zu machen.
This post has been edited 1 times, last edit by "migu" (Jun 5th 2004, 12:24pm)
Quoted
Ich behaupte hier einfach mal, Joachim wollte Dich auf das Interface Set aufmerksam machen (korrigiert mich Joachim). So wie ich die Api lese, hat BitSet ausser dem Set nicht allzuviel mit dem Collection-Framework zu tun.
Quoted
Das lernt man doch in der Vorlesung "Grundlagen der Technischen Informatik" alias "Informatik II" (zweites Semester). (Das sollte inzwischen schon Inhalt gewesen sein.)
Schön, kein .toBinaryString() dafür 6-12 Zeilen Code mehr.
Quoted
1. Setze i=0; wiederhole 2. bis b = 0. 2. b = a / 2. setze i-tes Bit = Rest. setze a = b; i++
Genau.
Quoted
BitSet implementiert das Set-Interface doch gar nicht. (Allerdings erweitert Set Collection.)
Quoted
Die Aufgabe fordert aber keine Effizienz.![]()
Quoted
Ich kann Joachim nur zustimmen. Denn welchen Sinn hat eine Aufgabe, wenn man sie nur noch mechanisch "herunterkodieren" muss? Dann könnte Niklas die Aufgabe auch von einer Maschine lösen lassen und nicht von lernenden Studenten.
Hast Du nicht eben vom Set Interface gesprochen? Dann hast alle Freiheiten die Dir Java lässt, abgesehen mal von der Namensgebung.
Quoted
Außerdem soll die Aufgabe sicherlich auch ein wenig Freiraum für eigene Lösungswege offen lassen. Eine zu präzise Aufgabenstellung würde das unmöglich machen.
Quoted
Und dann gibt es ja auch noch Studenten, die eine zu einfache - weil konkrete - Aufgabe so langweilig finden würden, dass sie nicht motiviert würden, sie zu lösen.
This post has been edited 2 times, last edit by "DominionMADz" (Jun 5th 2004, 1:51pm)
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Ja, genau das wollte er.
Quoted
Original von smeyer82
Ich behaupte hier einfach mal, Joachim wollte Dich auf das Interface Set aufmerksam machen (korrigiert mich Joachim).
Eben. Man kann sich zwar mittels Delegation etws zurechtbasteln, aber dann widerspricht das Punkt 3 der Aufgabenstellung:
Quoted
So wie ich die Api lese, hat BitSet ausser dem Set nicht allzuviel mit dem Collection-Framework zu tun.
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Dafür kann man aber auf das BitSet verzichten, was auch wieder Code spart. Delegation kann eine schöne Sache sein, in diesem Fall finde ich sie jedoch etwas holprig und unübersichtlich.
Quoted
Original von Cpt. Iglu
Schön, kein .toBinaryString() dafür 6-12 Zeilen Code mehr.
Quoted
1. Setze i=0; wiederhole 2. bis b = 0. 2. b = a / 2. setze i-tes Bit = Rest. setze a = b; i++![]()
BitSet auch. Das es nicht synchronisiert ist, wäre vielleicht ein Contra. Aber das ist eh' nicht gefordert. Der Interator interessiert mich weniger, der ist sowieso kurz und schmerzlos.
Quoted
Bit32Set ist ähnlich zu BItSet wird aber als Menge von Zahlen aufgefasst.
Du benutzt "Goto Java"? Ich habe damals Java u.a. mit CoreJava (M&T) gelernt. Schau ich immer wieder gerne mal rein. Sehr detailverliebt. Ansonsten hol ich mir häufiger das JavaMagazin (z.B. für Zugfahrten zu empfehlen), recht informativ bezgl. der "neuen" Erweiterungen wie JXTA, REGEX oder einfach nur bzgl. externer Module wie LDAP und die Apache Entwicklungen. Java Spektrum ist auch ganz nett, hat aber oftmals "akademische Ausschweife" wie 10 Seitige Abhandlungen über ".clone() ausserhalb der Küche". Lohnt sich am Kiosk danach zu suchen. Manchmal haben sie knorke Faltposter mit UML/J2EE Referenzen zum Wände tapezieren.
Quoted
Zum Iterator: siehe JavaBuch v3 Listing 15.4: Klasse LinkedQueue
Das ist des Pudels Kern! Ich finde, die Aufgabenstellung ist z.Zt. zusehr aus dem Blickwinkel des Verfassers.
Quoted
Zu der Aufagenstellung: Ich finde Sie ist klar, kann aber auch sein, dass ich das so sehe, weil ich meine die Aufgabe gemäß seines Erstellers verstanden zu haben. Wenn man das natürlich nicht hat, verfällt man leider leicht in Raterei und vllt letztendlich auch in Frustration.
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Übungszettel, oben rechts, fünfte Zeile.
Quoted
Original von NullAhnung
Wurde in der Vorlesung gesagt bis wann wir die Übung genau gemacht haben müssen, da ja die letzte Woche frei war?
Quoted
Dafür kann man aber auf das BitSet verzichten, was auch wieder Code spart. Delegation kann eine schöne Sache sein, in diesem Fall finde ich sie jedoch etwas holprig und unübersichtlich.
Das ist schnell erledigt: "public void representQuantity()" *kleinerScherzAmRande*. Aber warum soll ich denn dafür kein byte[]Array verwenden? Ich fände das gar nicht so abwägig.
Quoted
Eben. Man kann sich zwar mittels Delegation etws zurechtbasteln, aber dann widerspricht das Punkt 3 der Aufgabenstellung:
"(3) Eine solche Menge wird durch eine int-Variable repräsentiert: enthaltene Elemente sind gesetzte Bits, nicht enthaltene gelöschte. Die Menge {0, 1, 31} hat also die Darstellung 100...0011."
Quoted
(5) Beschränken Sie Methoden wie addAll auf Argumente vom selben Typ Bit32Set, Methoden wie add auf
Integer.Werfen Sie ggf. eine ClassCastException. Den Typ des Arguments können Sie mittels instanceof-
Operator testen: o instanceof Integer ist genau dann true, wenn o Instanz der Klasse Integer ist.
![]() |
Source code |
1 2 3 |
Bit32Set set32bit = new Bit32Set(); set32bit.add(set32bit); // geht also nicht! String absturz = set32bit.toString(); // wäre set32bit gültig, sollte hier die VM abrauchen |
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Ist es auch nicht (wobei ein Boolean-Array der Länge 32 noch naheliegender wäre
Quoted
Original von Cpt. Iglu
Aber warum soll ich denn dafür kein byte[]Array verwenden? Ich fände das gar nicht so abwägig.
Quoted
Eben. Man kann sich zwar mittels Delegation etws zurechtbasteln, aber dann widerspricht das Punkt 3 der Aufgabenstellung:
"(3) Eine solche Menge wird durch eine int-Variable repräsentiert: enthaltene Elemente sind gesetzte Bits, nicht enthaltene gelöschte. Die Menge {0, 1, 31} hat also die Darstellung 100...0011."
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Das ist aber nicht der Grund dafür. Diese Designentscheidung ist bereits durch das Interface Set vorgegeben. Die Methode add fügt ein neues Element zur Menge hinzu. Und da es sich bei Bit32Set um eine Menge handelt, die nur ganze Zahlen aus einem bestimmten Intervall enthalten kann, darf add auch nur Argumente vom Typ Integer akzeptieren. Analog verhält es bei den anderen Methoden.
Quoted
Original von Cpt. Iglu
Übrigens noch ein Lob an Niklas meinerseits:
Quoted
(5) Beschränken Sie Methoden wie addAll auf Argumente vom selben Typ Bit32Set, Methoden wie add auf
Integer.Werfen Sie ggf. eine ClassCastException. Den Typ des Arguments können Sie mittels instanceof-
Operator testen: o instanceof Integer ist genau dann true, wenn o Instanz der Klasse Integer ist.
Das .add() keine Argumente vom Typ Bit32Set zulässt ist verdammt gut gewählt. Denn ...
![]()
Source code
1 2 3 Bit32Set set32bit = new Bit32Set(); set32bit.add(set32bit); // geht also nicht! String absturz = set32bit.toString(); // wäre set32bit gültig, sollte hier die VM abrauchen
Und eben da wird die Aufgabe wieder sehr konkret
Quoted
Ist es auch nicht (wobei ein Boolean-Array der Länge 32 noch naheliegender wäre), jedoch ist in der Aufgabenstellung nunmal explizit vom Typ int die Rede.
Trotzdem sehr weitsichtig
Quoted
Das ist aber nicht der Grund dafür. Diese Designentscheidung ist bereits durch das Interface Set vorgegeben. Die Methode add fügt ein neues Element zur Menge hinzu. Und da es sich bei Bit32Set um eine Menge handelt, die nur ganze Zahlen aus einem bestimmten Intervall enthalten kann, darf add auch nur Argumente vom Typ Integer akzeptieren. Analog verhält es bei den anderen Methoden.
This post has been edited 1 times, last edit by "Cpt. Iglu" (Jun 5th 2004, 3:40pm)