簡體   English   中英

如何解決JUNG圖上的NullPointerException?

[英]How do I resolve a NullPointerException on a JUNG graph?

所以,基本上這就是我到目前為止所擁有的。

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

該方法的作用基本上是在基於JUNG的超圖中搜索循環。

這樣做的想法是,在參數上接收圖形,然后創建一個變量(相同類型),以便稍后在不對原始圖形進行任何更改的情況下從中刪除頂點,以防萬一找不到循環。 這樣,一旦頂點被刪除,我就可以使用一種名為findPath(,,)的方法。 該方法將“創建”另一條路徑,而無需遍歷移除的頂點。

我的編譯器說這里有問題:

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

我在Java(JUNG)中進行圖形編程僅一個月了。 救命

可以使用空列表來代替null來表示沒有后繼者,而可以避免使用NullPointerException 替換return null; return new LinkedList<>();

JUNG中存在一個錯誤,該錯誤已變為該代碼-如果圖形沒有頂點,則getSuccessors()應該返回空集合,而不是返回null,這是SetHypergraph的實現所做的。 對於那個很抱歉。 (通常,可以通過將getSuccessors(x)包裝在containsVertex(x)if語句中來避免這種情況。)

但是,遇到此錯誤的原因是,您至少在做一些沒有意義的事情:

(1)您正在將auxG分配給g(因此它們引用了相同的對象); 這是誤導的,沒有幫助。 同樣,您正在將aux2分配給aux,這也會引起誤解。

(2)您要從auxG中刪除aux [2],然后在auxG中請求aux2的后繼者。 一旦aux2被刪除,aux2將不再有任何繼任者。

(3)由於aux2和aux是相同的頂點,出於相同的原因,您最里面的循環也不會做任何有用的事情; 將沒有繼任者。

您需要重新考慮整個算法,因為這完全不符合設計要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM