You are not logged in.

This thread is closed.

Wanja

Junior Schreiberling

  • "Wanja" started this thread

Posts: 150

Date of registration: Feb 4th 2003

1

Friday, May 28th 2004, 12:10pm

Java Übung 6

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*

np

Junior Schreiberling

Posts: 155

Date of registration: Oct 23rd 2002

2

Friday, May 28th 2004, 1:37pm

RE: Java Übung 6

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*

Du musst eine eigene Klasse -- abgeleitet vom Interface Iterator -- implementieren, also einen Bit32SetIterator. Von dieser Klasse muss dann eine Instanz geliefert werden.

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

3

Saturday, June 5th 2004, 2:04am

Also ich hatte diesmal auch gesteigerte Probleme mit der Aufgabe!

Ich bin so vorgegangen, dass ich BitSet aus der API aufgegriffen und darum mein Programm gestickt habe. Die Aufgabenstellung war mir aber lange unklar, so dass deswegen zuviel(!) Zeit draufgegangen ist.

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?
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.
zu 5.: Dieser Punkt ist wieder konkreter. Es jetzt wurde mir klar, dass zwei Datentypen gefordert sind und welche interne Verarbeitung gefordert ist. Davor hätte ich einfach von BitSet vererbt und die Aufgabe wäre in 5 Minuten erledigt gewesen. :( Welche Methoden ich jetzt aber anpasse, die BitSet nicht bereit stellt muss ich erst mühsam aus der API erraten.
zu 6.: Klar und deutlich formuliert.

Deswegen an dieser Stelle meine Kritik.
Auch im Skript waren keinerlei Anhaltspunkte, welche Methoden gefordert sind. Kurzum alle wichtigen Informationen bzgl. des Verhaltens der neuen Klasse haben komplett gefehlt! Mit Ausnahme des ExceptionHandlings, welches aber dann wenig hilfreich ist ;).

An Niklas:
Bitte ändere die Aufgabenstellung nächstes Mal, indem Du Deine gewünschten Methoden mit den Ein- und Ausgabewerten kurz namentlich nennst.
Ich wäre Dir sehr dankbar. :)
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

This post has been edited 1 times, last edit by "Cpt. Iglu" (Jun 5th 2004, 2:05am)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

4

Saturday, June 5th 2004, 11:04am

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?
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

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.
Schau Dir mal die API-Dokumentation zum Set-Interface an.

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.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

5

Saturday, June 5th 2004, 12:06pm

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.
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 :D. Übergabewert von .toBinaryString() ist int, hatte ich nicht dazugeschrieben.

Quoted

Schau Dir mal die API-Dokumentation zum Set-Interface an.
Hmm, schon wieder? Was glaubst Du wie ich programmiere? :D 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)

Zusätzlich noch die Methoden die Collection und Iterator bereitstellt. Ein bisserl viel, wenn Du mich fragst.

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. :rolleyes:

Ein Fass ohne Boden, versuch bespeilsweise einfach mal eine Referenz auf die Sammlung selbst hinzuzufügen. Da kann die eigene Klasse schnell unsauber werden.

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.
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.
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

This post has been edited 1 times, last edit by "Cpt. Iglu" (Jun 5th 2004, 12:12pm)


smeyer82

Alter Hase

  • "smeyer82" is male

Posts: 372

Date of registration: Oct 14th 2002

Location: Ex-Kanzlerstadt Hannover

6

Saturday, June 5th 2004, 12:15pm

Quoted

Original von Cpt. Iglu
[

Quoted

Schau Dir mal die API-Dokumentation zum Set-Interface an.
Hmm, schon wieder? Was glaubst Du wie ich programmiere? :D 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)


Nur mal so:
Kann es sein, dass Du hier BitSet (eine Klasse aus java.util) und Set (ein Interface aus java.util) verwechselst?

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.

Wie Du intern von Deiner int-Variable auf die einzelnen gesetzten Bits kommst, dass ist dann natürlich Implementationssache. Aber ich denke, dass ein Bitset der falsche Weg ist, da er nun so garnichts mit einer Int-Variable zu tun hat.
"Sir! We are surrounded!" - "Excellent! We can attack in any direction!"

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

7

Saturday, June 5th 2004, 12:24pm

Quoted

Original von Cpt. Iglu
Überhaupt wie bitte kommst Du sonst auf diese Ausgabe: Darstellung 100...0011?


Das lernt man doch in der Vorlesung "Grundlagen der Technischen Informatik" alias "Informatik II" (zweites Semester). (Das sollte inzwischen schon Inhalt gewesen sein.)
Etwa:
1. Setze i=0; wiederhole 2. bis b = 0.
2. b = a / 2. setze i-tes Bit = Rest. setze a = b; i++

Quoted

Quoted

Schau Dir mal die API-Dokumentation zum Set-Interface an.
Hmm, schon wieder? Was glaubst Du wie ich programmiere? :D Sieh her...


BitSet implementiert das Set-Interface doch gar nicht. (Allerdings erweitert Set Collection.)

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. :rolleyes:


Die Aufgabe fordert aber keine Effizienz. :)

Quoted


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.
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.


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. 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.
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.
tar: Anlegen eines leeren Archivs wird feige verweigert.

This post has been edited 1 times, last edit by "migu" (Jun 5th 2004, 12:24pm)


Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

8

Saturday, June 5th 2004, 1:18pm

Leute ich seh das etwas anders...

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.

Wieso soll ich dabei nicht auch auf BitSet zurückgreifen?
Das SetInterface muss ich gezwungenermassen eh' benutzen, hab ich aus der Aufgabenstellung schon gesehen:
Set Interface
BitSet
Wo bitte existieren hier Inkompatiblitäten? Ich spiele damit auf "public class Bit32Set extends BitSet implements Set" an. Korregiert mich, aber Bit32Set unterscheidet sich was den Nutzen angeht von BitSet nur unwesentlich.

@migu:

Quoted

Das lernt man doch in der Vorlesung "Grundlagen der Technischen Informatik" alias "Informatik II" (zweites Semester). (Das sollte inzwischen schon Inhalt gewesen sein.)

Zweites Semester?! Hmm, dass hat Dir der Teufel gesagt!! :D

Quoted

1. Setze i=0; wiederhole 2. bis b = 0. 2. b = a / 2. setze i-tes Bit = Rest. setze a = b; i++
Schön, kein .toBinaryString() dafür 6-12 Zeilen Code mehr. :( Fazit: Dann hätte halt Dein Algo in der Aufgabenstellung stehen sollen, wenn Dir dieser Weg lieber ist!

Quoted

BitSet implementiert das Set-Interface doch gar nicht. (Allerdings erweitert Set Collection.)
Genau.

Quoted

Die Aufgabe fordert aber keine Effizienz. :)

Mutig, sehr mutig. Bestimmt bist Du ein guter Mittelsteckenläufer. :)

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.

Ist heute ein Jahrestreffen der "Gegner der klaren Aufgabenstellung"? Ich seh' das so: wenn es sich hierbei um ein "Spiel" handeln würde, dann mindert ein klares "WARUM?" nicht die Motivation. Im Moment erinnert mich das hier am Minesweeper ohne Fahnen!

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.
Hast Du nicht eben vom Set Interface gesprochen? Dann hast alle Freiheiten die Dir Java lässt, abgesehen mal von der Namensgebung.
(Immer diese Widersprüche *grml*)

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.

Ich gebe mich geschlagen. Du hast Recht.
[Binky]: Und was machen wir morgen, Brain?
[Brain]: Das gleiche wie jeden morgen, die Weltherrschaft an uns reissen!
Ja, unklare und weiträumige Aufgabenstellungen haben ihren Reiz.
Und wir wollen ja nicht, dass sich Studenten langweilen ... hmm ... hast Du eine Statistik darüber? So richtig mit Balken- und Tortengrafiken? Vielleicht als Slideshow? Bitte her damit. Mich persönlich motiviert so was nicht, habe schon die letzte Aufgabe nicht gelöst, weil sie mir zu schwammig war. Steht einfach in keinem Verhältnis zum Zeitaufwand. :rolleyes:
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

DominionMADz

Junior Schreiberling

Posts: 165

Date of registration: Feb 8th 2002

Location: SHG

9

Saturday, June 5th 2004, 1:43pm

Huhu ^^

@Iglu:

BitSet ist nicht nötig, auch wenn Bit32Set natürlich als Ergebniss nix anderes als ein "kleines" BitSet x € [0,31] ist. Am besten löst man die Aufgabe mit Bitoperationen, also die Methoden setBit, clearBit etc. schreiben.
edit: Bit32Set ist ähnlich zu BItSet wird aber als Menge von Zahlen aufgefasst.


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.

Zum Iterator: siehe JavaBuch v3 Listing 15.4: Klasse LinkedQueue



keep on smilin'

Domi ^^

This post has been edited 2 times, last edit by "DominionMADz" (Jun 5th 2004, 1:51pm)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

10

Saturday, June 5th 2004, 2:38pm

Quoted

Original von smeyer82
Ich behaupte hier einfach mal, Joachim wollte Dich auf das Interface Set aufmerksam machen (korrigiert mich Joachim).
Ja, genau das wollte er.

Quoted

So wie ich die Api lese, hat BitSet ausser dem Set nicht allzuviel mit dem Collection-Framework zu tun.
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."
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

11

Saturday, June 5th 2004, 2:44pm

Quoted

Original von Cpt. Iglu

Quoted

1. Setze i=0; wiederhole 2. bis b = 0. 2. b = a / 2. setze i-tes Bit = Rest. setze a = b; i++
Schön, kein .toBinaryString() dafür 6-12 Zeilen Code mehr. :(
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.

(Normalerweise würde man sowieso keine Spezialklasse wie Bit32Set implementieren, sondern gleich BitSet verwenden, aber hierbei geht es ja um eine Übungsaufgabe.)
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

12

Saturday, June 5th 2004, 2:53pm

Quoted

Bit32Set ist ähnlich zu BItSet wird aber als Menge von Zahlen aufgefasst.
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

Zum Iterator: siehe JavaBuch v3 Listing 15.4: Klasse LinkedQueue
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

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.
Das ist des Pudels Kern! Ich finde, die Aufgabenstellung ist z.Zt. zusehr aus dem Blickwinkel des Verfassers.
Muchas Gracias Domi. :) Ich denke dem habe ich nichts mehr hinzuzufügen.
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

NullAhnung

Erfahrener Schreiberling

  • "NullAhnung" is female

Posts: 332

Date of registration: Apr 28th 2003

13

Saturday, June 5th 2004, 3:08pm

Nur ne kurze Frage: Wurde in der Vorlesung gesagt bis wann wir die Übung genau gemacht haben müssen, da ja die letzte Woche frei war?

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

14

Saturday, June 5th 2004, 3:13pm

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?
Übungszettel, oben rechts, fünfte Zeile.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

15

Saturday, June 5th 2004, 3:13pm

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.

Ich finde eine eigene Spezialklasse sowieso bedenklich. Begründung hab ich ja oben schon geliefert. Ich denke es lag an der Aufgabenstellung, das ich mich gleich auf BitSet gestürtzt habe zumal die Einschränkung eigentlich kein Problem darstellt. Delegation ist ja nun so schwer auch wieder nicht und da ich sowieso die Argumente kontrollieren soll (Punkt 5 der Aufg.) sah mir das auf den ersten Blick nach Zeitersparnis aus. Zudem BitSet (wie gesagt) ganz nett optimiert ist.

Das sind nämlich die Vorraussetzungen damit es mir Spass macht. :D

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."
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.
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

16

Saturday, June 5th 2004, 3:23pm

Ü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
Hach ja, eine nette Diskussionsrunde :).
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

17

Saturday, June 5th 2004, 3:27pm

Quoted

Original von Cpt. Iglu

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."
Aber warum soll ich denn dafür kein byte[]Array verwenden? Ich fände das gar nicht so abwägig.
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. :)
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

18

Saturday, June 5th 2004, 3:34pm

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
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.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

19

Saturday, June 5th 2004, 3:35pm

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.
Und eben da wird die Aufgabe wieder sehr konkret ;). Aber das mit dem boolean[]Array ist gut! Ich glaub das schreit nach einer eigenen Methode in meiner Lösung ... .toBoolArray() dann hab ich auch gleich die Gelegenheit Migu's Algo mit einzubinden. ^^
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

20

Saturday, June 5th 2004, 3:38pm

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.
Trotzdem sehr weitsichtig ;). Denn eine LinkedList konnte ich so im SDK 1.2.1 bequem abschiessen, ich denke zum 1.5beta gibts da immer noch keine Veränderung. Set sollte sich dazu analog verhalten.
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

This post has been edited 1 times, last edit by "Cpt. Iglu" (Jun 5th 2004, 3:40pm)