如何在java中为加权无向图编写toString方法?

如何在java中为加权无向图编写toString方法?,java,iterator,tostring,undirected-graph,weighted-graph,Java,Iterator,Tostring,Undirected Graph,Weighted Graph,我已经为无向图和符号表编写了一个类,用于将边从字符串转换为数字,反之亦然,但是双字符串方法不起作用,因为我遇到了堆栈溢出错误。我实现了一个LinkedStack,它与java库中的堆栈相同。我没有得到编译错误,如果您能看看toString方法,我将不胜感激。其他方法都很有效。下面是代码。我想问题是当我调用迭代器时 public class EdgeWeightedGraph { private final int V; private int E; private LinkedStack<

我已经为无向图和符号表编写了一个类,用于将边从字符串转换为数字,反之亦然,但是双字符串方法不起作用,因为我遇到了堆栈溢出错误。我实现了一个LinkedStack,它与java库中的堆栈相同。我没有得到编译错误,如果您能看看toString方法,我将不胜感激。其他方法都很有效。下面是代码。我想问题是当我调用迭代器时

public class EdgeWeightedGraph {
private final int V;
private int E;
private LinkedStack<Edge>[] adj;

public EdgeWeightedGraph(int V){
    this.V = V;
    this.E = 0;
    adj = new LinkedStack[V];
    for (int v = 0; v < V; v++)
    {
        adj[v] = new LinkedStack<Edge>();
    }
}

public int V(){
    return V(); // This was the error. thank you for spotting it :)
}

public int E(){
    return E;
}

public int degree(int v){
    return adj[v].size();
}

public void addEdge(Edge e){
    int v = e.either();
    int w = e.other(v);
    adj[v].push(e);
    adj[w].push(e);
    E++;
}

public Iterable<Edge> adj(int v){
    return adj[v];
}

public Iterable<Edge> edges(){
    LinkedStack<Edge> b = new LinkedStack<Edge>();
    for(int v = 0; v < V; v++)
    {
        for(Edge e: adj[v])
        {
            if(e.other(v) > v)
                b.push(e);
        }
    }
    return b;
}
}
public类EdgeWeightedGraph{
私人终审法院;
私人互联网;
私有链接堆栈[]adj;
公共边缘图(int V){
这个,V=V;
这一点。E=0;
adj=新链接堆栈[V];
对于(int v=0;vv)
b、 推(e);
}
}
返回b;
}
}
至于包含toString()的其他类

导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公共类边缘符号图{
私家街;;
私有字符串[]密钥;
私人边卫图;
公共边缘符号图(文件流){
st=新的st();
尝试
{
扫描仪输入=新扫描仪(流);
while(在.hasNextLine()中)
{
字符串v1=in.next();
字符串v2=in.next();
如果(!st.contains(v1))
st.put(v1,st.size());
如果(!st.contains(v2))
st.put(v2,st.size());
}
keys=新字符串[st.size()];
for(字符串名称:st.keys())
密钥[st.get(名称)]=名称;
G=新的边缘图(标准尺寸());
扫描器m=新扫描器(流);
对于(int i=0;m.hasNextLine();i++)
{
intv1=st.get(m.next());
int v2=st.get(m.next());
边e=新边(v1、v2、i);
G.增补(e);
}
} 
catch(filenotfounde异常)
{
e、 printStackTrace();
}
}
公共EdgeWightEdgraph getGraph(){
返回G;
}
公共字符串名称(int v){
返回键[v];
}
公共整数索引(字符串s){
返回圣吉;
}
公共字符串toString(){//这是需要修复的方法
StringBuilder s=新的StringBuilder();
s、 附加(G.V()+“”+G.E()+“\n”);
对于(int v=0;v
您对方法V()的定义是递归的,可能会进入无限循环。您可能希望它是:

public int V(){
    return V;
}

“如果可以查看toString方法”抱歉,似乎找不到
Edge
toString()
方法,因此无法查看。--另外,.@Andreas-在“包含toString()的另一个类”下面的代码中向下滚动,@andythonas被命名为
EdgeSymbolGraph
,它的
toString
方法调用
e.toString()
,我似乎在问题的任何地方都找不到class
Edge
toString
方法。如果没有stacktrace来告诉我们错误的确切位置,那么它很容易就位于
toString
方法中,因此当然,我们现在做了错误发生在高出6行的
s.append(G.V()+…
调用中,但这并不意味着这个问题缺少所需的信息,即stacktrace和
Edge
代码。很好地发现了这一点。想知道为什么从stacktrace中看不出这一点。
public int V(){
    return V;
}