如何从.txt文件创建Java图形文件 [英] How To Create A Java Graph File from .txt file

查看:155
本文介绍了如何从.txt文件创建Java图形文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个图形文件,我必须从.gra文件(我认为它是一个.txt文件)读取值。我们被告知以<格式<顶点> <名称> < X-坐标> < y-coord> ,与边缘相同

我看了一些相关的问题,但仍无法找到答案。



下面是我给出的代码:

  public EdgeListVertex(V元素){
this.element = element;
}

@Override
public V element(){
return element;


public String toString(){
return element.toString();
}
}

private class EdgeListEdge实现Edge< E> {
位置< EdgeListEdge>位置;
E元素;
EdgeListVertex开始,结束;


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>顶点;
私人列表< EdgeListEdge>边缘;

$ b 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;
返回终点;
}

@覆盖
公共顶点< V>相反(Vertex V V,Edge E){
Vertex V []] endpoints = endVertices(e);
if(endpoints [0] .equals(v)){
return endpoints [1];
} else if(endpoints [1] .equals(v)){
return endpoints [0];
}
抛出新的InvalidVertexException(); (EdgeListEdge edge:edges){

$ b @Override
public boolean areAdjacent(Vertex V v,Vertex V w){
((edge.start.equals(v))&&(edge.end.equals(w)))返回true; ((edge.end.equals(v))&&(edge.start.equals(w)))返回true;
if
}
返回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替换(Edge E,e x){
EdgeListEdge edge =(EdgeListEdge)e;
E temp = edge.element;
edge.element = x;
return temp;
}

@覆盖
公共顶点< V> insertVertex(V v){
EdgeListVertex vertex = new EdgeListVertex(v);
位置< EdgeListVertex> position = vertices.insertLast(vertex);
vertex.position = position;
返回顶点;
}

@Override
public Edge< E> (EdgeListVertex)v,(EdgeListVertex)w,o);其中,EdgeEdgeEdge(Vertex V,v Vertex V w,E o)
位置< EdgeListEdge> position = edges.insertLast(edge);
edge.position = position;
返回边缘;
}

@Override
public V removeVertex(Vertex V){
Iterator< Edge< E>> it = incidentEdges(v).iterator();
while(it.hasNext())it.remove();

EdgeListVertex vertex =(EdgeListVertex)v;
vertices.remove(vertex.position);
返回vertex.element;
}

@Override
public E removeEdge(Edge< E> e){
EdgeListEdge edge =(EdgeListEdge)e;
edges.remove(edge.position);
返回edge.element;
}

@Override
public List< Edge< E>> incidentEdges(Vertex V){
LinkedList< Edge< E>> list = new LinkedList< Edge< E>>(); (EdgeListEdge edge:edges){
if(edge.start.equals(v))list.insertLast(edge);


if(edge.end.equals(v))list.insertLast(edge);
}

返回列表;
}

@Override
public List< Vertex< V>>顶点()​​{
LinkedList< Vertex< V>> list = new LinkedList< Vertex< V>>();
for(EdgeListVertex vertex:vertices){
list.insertLast(vertex);
}
返回列表;
}

@Override
public List< Edge< E>>边(){
LinkedList< Edge< E>> list = new LinkedList< Edge< E>>();
(EdgeListEdge edge:edges){
list.insertLast(edge);
}
返回列表;
}

}

任何提示?

解决方案

好的方法可能是创建一个新的顶点,名称和坐标的类。然后将扫描仪中的数据读入 ArrayList 你刚创建的类的一个>。在这之后,您可以将ArrayList传递到您正在用于绘图的任何东西(这可能需要一些调整)。
$ b

示例扫描程序代码(未经测试强大>):

 文件graphFile = new File(filepath); 
扫描仪graphScanner =新扫描仪(graphFile);

然后,从扫描仪(未经测试)读取:

  ArrayList< graphClass> dataPoints = new ArrayList< graphClass>(); (graphScanner.hasNextLine()){
dataPoints.add(new graphClass(graphScanner.nextDouble(),graphScanner.next(),graphScanner.nextDouble())时,您必须创建graphClass
。 graphScanner.nextDouble()); //假定graphClass的构造函数按照该顺序获取顶点,名称,x,y

我希望这有助于。


I am trying to create a graph file .I have to read in values from a .gra file(which I think is a .txt file).We were told to tokenise lines based on a space in the format <vertex> <name> <x-coord> <y-coord>,same for edge

I had a look at a couple of related questions,but still cant find the answer.

Here's the code I was given:

        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;
    }

}

Any tips?

解决方案

A good approach might be to create a new class with fields for vertex, name and coordinates. Then read in the data from a scanner into an ArrayList of the class you just created. After this, you could just pass the ArrayList into whatever you are using for graphing (which might require a few tweaks).

Example scanner code (untested):

File graphFile = new File(filepath);
Scanner graphScanner = new Scanner(graphFile);

Then, to read from the scanner (untested):

ArrayList<graphClass> dataPoints = new ArrayList<graphClass>(); //you will have to make graphClass
while(graphScanner.hasNextLine()) {
    dataPoints.add(new graphClass(graphScanner.nextDouble(), graphScanner.next(), graphScanner.nextDouble(), graphScanner.nextDouble()); //assuming constructor of graphClass takes vertex, name, x, y in that order

I hope this helps.

这篇关于如何从.txt文件创建Java图形文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆