[英]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.