D
Dekker
Gast
Hi,
häng hier gerade an folgendem Problem:
Ich möchte eine Klasse schreiben, die einen Graphen speichern kann. Gleichzeitig soll die Klasse eben wiederverwendbar bleiben, da ich hier je nach Aufgabe mit unteschiedlichen Knoten- und Kantentypen arbeiten muss.
Klassen header sieht wie folgt aus:
Vertex und Edge<V> sollen sicherstellen, dass Kanten und Knoten die Standardfunktionen wie z.b. setID für Knoten namen etc. haben.
Problem ist jetzt aber, dass die Klasse nun auch einen Graphen aus einer übergeben Datei erstellen können soll. Kann ich das den irgendwie mit generischen Typen realisieren?
Funktion sieht bisher so aus:
Problem ist halt die mit !!..!! markierte Zeile. Mir ist klar, dass das so nicht funktioniert. Kennt hier jemand ne Möglichkeit? Im schlimmsten Falle, müsste ich halt jedesmal Vertex und Edge für jede Aufgabe komplett neu für die Graphenklasse erstellen, fände es aber schöner wenn ich es so irgendwie hinkriegen könnte.
Habe auch schon einige Zeit damit verbracht, in docs etc nach Möglichkeiten zu suchen, bin aber bisher leider nicht erfolgreich gewesen.
Schonmal danke im vorraus.
[Bevor wer meckert, ja die selbe Frage habe ich auch in einem anderen Forum gestellt, da gabs aber auch noch keine Antwort =( ]
häng hier gerade an folgendem Problem:
Ich möchte eine Klasse schreiben, die einen Graphen speichern kann. Gleichzeitig soll die Klasse eben wiederverwendbar bleiben, da ich hier je nach Aufgabe mit unteschiedlichen Knoten- und Kantentypen arbeiten muss.
Klassen header sieht wie folgt aus:
Code:
public class Graph<V extends Vertex,E extends Edge<V>> {
// Stores Edges and Vertices and graphtype
private Vector<V> vertices;
private Vector<E> edges;
boolean directed;
// Stores adjacency list
private HashMap<V,Vector<E>> adjacency_list; // V is the key and also the startvertex
}
Vertex und Edge<V> sollen sicherstellen, dass Kanten und Knoten die Standardfunktionen wie z.b. setID für Knoten namen etc. haben.
Problem ist jetzt aber, dass die Klasse nun auch einen Graphen aus einer übergeben Datei erstellen können soll. Kann ich das den irgendwie mit generischen Typen realisieren?
Funktion sieht bisher so aus:
Code:
public void create_from_file(String filename){
try{
if(filename == null) throw new IllegalArgumentException("No filename was given");
// Create a new buffered reader to read from the file
BufferedReader buf = new BufferedReader(new FileReader(filename));
// Instantiate a new tokenizer to parse the file
StringTokenizer tokenizer = new StringTokenizer(buf.readLine());
if(tokenizer.countTokens() < 5 || tokenizer.countTokens() > 5 )
throw new FileFormatException("Problem in file header");
// Parse headerline
String type = tokenizer.nextToken(); // Graph type
String n = tokenizer.nextToken();
n = tokenizer.nextToken(); // Number of vertices
String m = tokenizer.nextToken();
m = tokenizer.nextToken(); // Number of edges
if(type == "g") this.directed = true;
int nv = Integer.valueOf(n);
int mv = Integer.valueOf(m);
// Create vertices
V helpvert;
for(int i = 0; i < nv; i++){
!!helpvert = new V(i);!! das hier geht
helpvert.setID(i);
this.vertices.add(helpvert);
}
}catch(Exception e){
System.out.println(e);
}
}
Problem ist halt die mit !!..!! markierte Zeile. Mir ist klar, dass das so nicht funktioniert. Kennt hier jemand ne Möglichkeit? Im schlimmsten Falle, müsste ich halt jedesmal Vertex und Edge für jede Aufgabe komplett neu für die Graphenklasse erstellen, fände es aber schöner wenn ich es so irgendwie hinkriegen könnte.
Habe auch schon einige Zeit damit verbracht, in docs etc nach Möglichkeiten zu suchen, bin aber bisher leider nicht erfolgreich gewesen.
Schonmal danke im vorraus.
[Bevor wer meckert, ja die selbe Frage habe ich auch in einem anderen Forum gestellt, da gabs aber auch noch keine Antwort =( ]