IntSet

sh33p

Bekanntes Mitglied
Java:
import java.util.ArrayList;
import java.util.List;

/* Ein Objekt der Klasse IntSet repräsentiert eine Menge
* (im mathematische Sinne) von Integern.
* Die Klasse ist wertorientiert.
*/

public class IntSet {
       
        /* Container für die Elemente der Menge
        * Repräsentationsinvariante: eltList hat keine Duplikate */
        private List<Integer> eltList;
        
        /* Konstruktor der leeren Menge */
        IntSet() {
                eltList = new ArrayList<Integer>();
        }

        /* Konstruktor aus einer Liste von Zahlen */
        IntSet( List<Integer> intList ) {
                eltList = intList;
        }
        
        /* Ein Element der Menge hinzufügen */
        IntSet add( Integer i ) {
                IntSet set = new IntSet();
                for ( Integer j: this.eltList ) {
                        set.eltList.add( j );
                }
                set.eltList.add( i );
                return set;
        }
        
        /* Mengenvereinigung */
        IntSet union( IntSet set ) {
                this.eltList.addAll( set.eltList );
                return this;
        }

        /* Anzahl der Elemente */
        int getSize() {
                return eltList.size();
        }
}

Mir ist nicht wirklich klar was an dem Stück Code falsch sein soll. Das einzige was mir auffällt, dass die Angabe der Methodenspezifikationen fehlt.
Seht ihr noch irgendwelche Fehler? ???:L
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
wenn add() schon ein neues IntSet erzeugt, warum union() dann nicht auch?
ist das eine Rätsel-Hausaufgabe oder hast du konkrete Zweifel an der Richtigkeit des Codes? ;)
 

FArt

Top Contributor
Ich weiß nicht genau was du meinst aber das fällt mir auf:
- Die Doku ist keine gute Javadoc
- das Set implementiert nicht das Interface Set. Gibt es dafür einen Grund?
- der parmeterelose Konstruktor könnte den this(List) Konstruktor verwenden
- benutze nicht die Wrapper-Klasse Interger in der Schnittstelle
- ich erwarte nicht, dass eine Methode "add" etwas zurückliefert
- add liefert eine Kopie der Klasse, union aber nicht
- ein Set mit einer Liste realisiert... hm... was soll das Set bringen?
- ein Set darf keine Duplikate enthalten, was du nicht überprüfst
- die Konstruktoren sind package protected. Ist das Absicht?
 
Zuletzt bearbeitet:
M

Marcinek

Gast
JavaDoc beginnt miz /** ansonsten hast du nur Kommentare, die nicht als Javadoc angesehen werden ;D

Die Rückgabe der eigenen Referenz ist üblich bei vielen APIs, die dann einfaches adden via

.add().add().add() erlauben ^^

Die add() Methode oben ist aber total murks. Damit hätte man unmutable Objekte, was man aber so gar nicht mitbekommt ^^

Bei Union ist das korrekt, wenn man das o.g. verhalte abbilden will.
 

Oben