如何在Jung图上解析NullPoInterException



所以,基本上这是我到目前为止的。

public List<String> cycleSearch(Graph<String,String> g) throws Exception{
    List<String> list = null;
    Graph<String,String> auxG = g;
    for(String aux : g.getVertices()){
        String aux2 = aux;
        if(g.degree(aux)>1){
            if(auxG.removeVertex(aux2)){
            for(String d : g.getSuccessors(aux2)){
                for(String a : g.getSuccessors(aux)){
                    if(a!=d){
                        list = findPath(auxG,d,a);
                        if(list!=null){
                            list.add(0,aux);
                            list.add(aux);
                            return list;
                            }
                        }
                    }
                }
            }
        }
        auxG = g;
    }
    return null;
}

该方法的作用基本上是在基于荣格的超图中搜索一个周期。

想法是在参数上收到图形,然后创建一个变量(作为同一类型)以稍后从其上删除顶点而不在原始图上进行任何更改,以防万一找不到周期。这样一旦删除顶点后,我就可以使用一种称为FindPath(,,)的方法。该方法将"创建"另一条路径,而无需穿过删除的顶点。

我的编译器说这里有问题:

            for(String d : g.getSuccessors(aux2))

我在Java(Jung)的编程图表仅1个月。帮助

jung中有一个错误,该代码已经转动 - getSuccessors()应该返回一个空集合,如果图形没有顶点,而不是返回null,这就是什么Sethypergraph的实现确实如此。对于那个很抱歉。(通常,您可以通过在containsVertex(x)If语句中包装getuccessors(x)来避免这种情况。)

但是,您遇到此错误的原因是您至少要做几个没有意义的事情:

(1)您将auxg分配给g(因此他们引用了同一对象);这是误导性的,没有帮助。同样,您将AUX2分配给AUX,这也是误导的。

(2)您正在从AUXG中删除AUX [2],然后要求AUX2的继任者在AUXG中。AUX2删除后AUX2将不会有任何继任者。

(3)由于AUX2和AUX是相同的顶点,因此您最内向的循环也不会出于相同的原因做任何有用的东西;不会有继任者。

您需要重新考虑整个算法,因为这根本不正确。

,而不是使用null代表不代表后继者,您可以只使用一个空列表,从而避免使用NullPointerException。用return new LinkedList<>();替换return null;

相关内容

最新更新