So Erstellen Sie Eine Java-Grafik-Datei aus .txt-Datei
Ich versuche ein Diagramm erstellen Datei .Ich lese Werte aus einer .gra-Datei(was ich denke ist ein .txt-Datei).Uns wurde gesagt, zu tokenise Linien basieren auf einem Feld im format <vertex> <name> <x-coord> <y-coord>
,das gleiche gilt für edge
Ich hatte einen Blick auf ein paar der Fragen,aber kann immer noch nicht die Antwort zu finden.
Hier ist der code, den ich bekam:
public EdgeListVertex(V element) {
this.element = element;
}
@Override
public V element() {
return element;
}
public String toString() {
return element.toString();
}
}
private class EdgeListEdge implements Edge<E> {
Position<EdgeListEdge> position;
E element;
EdgeListVertex start, end;
public EdgeListEdge(EdgeListVertex start, EdgeListVertex end, E element) {
this.start = start;
this.end = end;
this.element = element;
}
@Override
public E element() {
return element;
}
public String toString() {
return element.toString();
}
}
private List<EdgeListVertex> vertices;
private List<EdgeListEdge> edges;
public EdgeListGraph() {
vertices = new LinkedList<EdgeListVertex>();
edges = new LinkedList<EdgeListEdge>();
}
@SuppressWarnings("unchecked")
@Override
public Vertex<V>[] endVertices(Edge<E> e) {
EdgeListEdge edge = (EdgeListEdge) e;
Vertex<V>[] endpoints = (Vertex<V>[]) new Vertex[2];
endpoints[0] = edge.start;
endpoints[1] = edge.end;
return endpoints;
}
@Override
public Vertex<V> opposite(Vertex<V> v, Edge<E> e) {
Vertex<V>[] endpoints = endVertices(e);
if (endpoints[0].equals(v)) {
return endpoints[1];
} else if (endpoints[1].equals(v)) {
return endpoints[0];
}
throw new InvalidVertexException();
}
@Override
public boolean areAdjacent(Vertex<V> v, Vertex<V> w) {
for (EdgeListEdge edge: edges) {
if ((edge.start.equals(v)) && (edge.end.equals(w))) return true;
if ((edge.end.equals(v)) && (edge.start.equals(w))) return true;
}
return false;
}
@Override
public V replace(Vertex<V> v, V x) {
EdgeListVertex vertex = (EdgeListVertex) v;
V temp = vertex.element;
vertex.element = x;
return temp;
}
@Override
public E replace(Edge<E> e, E x) {
EdgeListEdge edge = (EdgeListEdge) e;
E temp = edge.element;
edge.element = x;
return temp;
}
@Override
public Vertex<V> insertVertex(V v) {
EdgeListVertex vertex = new EdgeListVertex(v);
Position<EdgeListVertex> position = vertices.insertLast(vertex);
vertex.position = position;
return vertex;
}
@Override
public Edge<E> insertEdge(Vertex<V> v, Vertex<V> w, E o) {
EdgeListEdge edge = new EdgeListEdge((EdgeListVertex) v, (EdgeListVertex) w, o);
Position<EdgeListEdge> position = edges.insertLast(edge);
edge.position = position;
return edge;
}
@Override
public V removeVertex(Vertex<V> v) {
Iterator<Edge<E>> it = incidentEdges(v).iterator();
while (it.hasNext()) it.remove();
EdgeListVertex vertex = (EdgeListVertex) v;
vertices.remove(vertex.position);
return vertex.element;
}
@Override
public E removeEdge(Edge<E> e) {
EdgeListEdge edge = (EdgeListEdge) e;
edges.remove(edge.position);
return edge.element;
}
@Override
public List<Edge<E>> incidentEdges(Vertex<V> v) {
LinkedList<Edge<E>> list = new LinkedList<Edge<E>>();
for (EdgeListEdge edge : edges) {
if (edge.start.equals(v)) list.insertLast(edge);
if (edge.end.equals(v)) list.insertLast(edge);
}
return list;
}
@Override
public List<Vertex<V>> vertices() {
LinkedList<Vertex<V>> list = new LinkedList<Vertex<V>>();
for (EdgeListVertex vertex : vertices) {
list.insertLast(vertex);
}
return list;
}
@Override
public List<Edge<E>> edges() {
LinkedList<Edge<E>> list = new LinkedList<Edge<E>>();
for (EdgeListEdge edge : edges) {
list.insertLast(edge);
}
return list;
}
}
Irgendwelche Tipps?
- Was ist deine konkrete Frage?
- ooks wie Ihr code-snippet abgeschnitten wurde, an der Spitze. Wenn Hausaufgaben, nutzen Sie bitte die "Hausaufgaben" - tag. Vermutlich haben Sie Fragen über die I/O beteiligt, aber Sie müssen, um zu zeigen, was Sie als erste ausprobiert.
- Ok.Meine konkrete Frage ist wie ich anfangen soll,oder das Konzept zur Erstellung des Graphen.Ich denke, um mit einem scanner-Objekt,dann verwenden Sie etwas wie BufferedReader-Objekt(bin mir nicht sicher ob es so in der JAVA API),dann mit readLine().Nachdem Sie das tun,wandeln Sie den gelesenen Wert in das element des EdgeListEdge Objekt(oder EdgeListVertex Objekt).Ich bin nicht sehr gut in Java-Syntax aber,und woould schätzen jeden Hinweis,tips..@bkail ich bin nicht sicher, was I/O ist und welche code-snippet abgeschnitten wurde(die syntax für vertex-Schöpfung oder der Anfang der Klasse)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist ein guter Ansatz sein könnte, um eine neue Klasse erstellen, mit den Feldern für die vertex, name und Koordinaten. Dann Lesen Sie die Daten von einem scanner in ein ArrayList der Klasse, die Sie gerade erstellt haben. Nach diesem, man könnte einfach die ArrayList in was auch immer Sie verwenden für die grafische Darstellung (das erfordert möglicherweise ein paar tweaks).
Beispiel code scanner (ungetestet):
Dann zum Lesen der scanner (ungetestet):
Ich hoffe, das hilft.