[英]Java Graph Implementation: nullpointerexception
我正在嘗試使用arrayList
的arrayList
在Java中實現圖形。
每當調用addEdge
函數時,我都會不斷收到NullPointerException
。 我似乎不知道為什么。
這是我的代碼:
import java.util.ArrayList;
public class Graph {
private static ArrayList<ArrayList<Integer>> adjList;
public Graph(int vertices){
ArrayList<ArrayList<Integer>> adjList = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < vertices; i++){
adjList.add(new ArrayList<Integer>());
}
}
public void addEdge(int source, int destination){
adjList.get(source).add(destination);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Graph g = new Graph(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
System.out.println("Neighbors of vertex 0: " + adjList.get(0));
System.out.println("Neighbors of vertex 2: " + adjList.get(2));
}
}
請告知。
在Graph
構造函數中,您不是要初始化static
成員adjList
,而是要定義一個具有相同名稱的本地成員。 另外,不需要adjList
是static
,因為它將在Graph
所有實例之間共享。
將其調整為:
private ArrayList<ArrayList<Integer>> adjList;
public Graph(int vertices){
adjList = new ArrayList<ArrayList<Integer>>();
...
}
您應該在adjList
字段聲明中刪除static
。
此修飾符使adjList
成為引用null
的靜態實例。 並且在構造函數中,您實例化了另一個adjList
值,該adjList
對於您的構造函數是本地的(並且在構造函數被調用后,有待GC收集)。 這是兩個完全不同的變量,具有相同的名稱
更改構造函數,以便不聲明局部adjList變量
public Graph(int vertices){
adjList = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < vertices; i++){
adjList.add(new ArrayList<Integer>());
}
}
還要使此adjList變量為非靜態,因為您希望adjList對於每個圖都是唯一的,並且不要在所有圖之間共享
private ArrayList<ArrayList<Integer>> adjList;
在Graph構造函數中,您聲明adjList變量,該變量與您的靜態類沖突。 你應該更換
public Graph(int vertices){
ArrayList<ArrayList<Integer>> adjList = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < vertices; i++){
adjList.add(new ArrayList<Integer>());
}
}
通過
public Graph(int vertices){
adjList = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < vertices; i++){
adjList.add(new ArrayList<Integer>());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.