An die Aufgabensteller bzw. Übungsleiter:
Wie habt Ihr Euch das mit den Enumerations gedacht? Das gibts ja afaik nur als Interface. Sollen wir das also auch noch implementieren oder können wir auch was anderes (z.B. Iterator) benutzen?
also für einige der benötigten enumeratoren gibts schon fertige in den klassen (hashtable) die kannst du einfach weitergeben…
mindestens einen musst du allerdings wohl selber schreiben..
ich hab da eine inner class für geschrieben, von der dann eine instanz erzeugt und zurückgegeben wird..
Kannst auch einfach alles in einen Vector tun. Dieser kann eine Enumeration seiner Elemente zurückgeben!
Das mit dem Vector hab ich inzwischen auch herausgefunden. Versteh zwar nich, wieso das geht, aber von mir aus…
Die Lösung mit der Inner Class finde ich irgendwie blöd.
Aber trotzdem vielen Dank für die Antworten bis hier.
bei der successor enum gehts wohl kaum anders…
(und in den java sources wirds im allgemeinen auch so mit inner classes gemacht..)
EDIT: geht schon anders… vektor erzeugen, alle knoten rein die du dann in der enumeration zurückgeben willst und dann eine enum von dem vektor zurückgeben - nur es ist deutlich auswändiger *g*
Das mit dem Vector hab ich inzwischen auch herausgefunden. Versteh zwar nich, wieso das geht, aber von mir aus…
Du musst ja auch garnicht zwangläufig verstehen wie die Klassen der API implementiert sind. In der Regel reicht es ja aus zu wissen wie man sie sinnvoll einsetzt. Und wenn die Klasse Vector halt die Möglichkeit bietet eine Enumeration zurückzugeben, dann ist doch toll!
EDIT: geht schon anders… vektor erzeugen, alle knoten rein die du dann in der enumeration zurückgeben willst und dann eine enum von dem vektor zurückgeben - nur es ist deutlich auswändiger *g*
Also, wenn ich ehrlich bin, finde ich diese Lösung viel einfacher und nicht "auswändiger".
Aber so langsam müssen wir hier mal aufpassen, dass wir nich zu viel verraten… [img]
http://www.fb18.de/gfx/25.gif[/img]
naja ich meine nicht aufwändiger zu programmieren… das sicher nicht ;) aber es werden eben viele objekte erzeugt die man sonst eigentlich garnicht bräuchte..
Wieso dat denn? Die Objekte sind doch die gleichen (identischen), nur der Vektor wird neu erzeugt.
Das hier drüber kam übrigens von mir. Hatte vergessen mich einzuloggen. Sorry!!!
mh der vektor und einige arrays (im vektor) werden wohl erzeugt. naja auch nichts weiter schlimmes bei dem programm ;)
Moin,
bei der Musterlösung, Aufgabe2 werden bei der Methode removeVertex(Vertex knoten) auch noch die Kanten zuvor entfernt. Tut das not?[img]
http://www.fb18.de/gfx/2.gif[/img] Oder was passiert, wenn nicht? Ach ja, einige ham eine InnerClass geschrieben und das Interface Enumeration implementiert… Ging das? Und wenn ja, dann poste bitte mal den Code…
Emanuel
Nun ja, die Kanten sollten ja jeweils bei den Knoten, zwischen denen die Kante liegt, gespeichert werden. Entfernst du nun nicht die Kanten aus den entsprechenden anderen Knoten, kannst du später arge Probleme bekommen, weil dann bei den anderen Knoten noch Kanten vorhanden sein können, die zu einem Knoten führen, den es gar nicht in deinem Graphen gibt.
Ach ja, einige ham eine InnerClass geschrieben und das Interface Enumeration implementiert… Ging das? Und wenn ja, dann poste bitte mal den Code…
Emanuel
warum sollte es nich gehen?
public Enumeration getSuccessors(Vertex v)
{
return new SuccessorEnum(v);
}
private class SuccessorEnum implements Enumeration
{
private Vertex _v;
private Enumeration _edges;
private SuccessorEnum(Vertex v)
{
_v = v;
_edges = getEdges(v);
}
public boolean hasMoreElements()
{
return _edges.hasMoreElements();
}
public Object nextElement()
{
return ((Edge)_edges.nextElement()).getTargetVertex(_v);
}
}
(wobei das natürlich bei anderen (die z.b. andere methoden an den edges haben auch etwas anders aussieht… *g*)