的代碼塊列出如下子圖。但錯誤消息顯示「java.lang.NullPointerException」並顯示問題在於「subGraph [i] .nodeDelay = AdjList [i] .nodeDelay;」線。Java數組的NullPointerException
我通過打印到控制檯進行測試。並發現AdjList.length是8,問題發生在第一輪;甚至當我只寫「subGraph [i] .nodeDelay;」沒有分配任何值,它也顯示錯誤的信息。 對此有何想法?提前致謝。
的代碼塊列出如下子圖。但錯誤消息顯示「java.lang.NullPointerException」並顯示問題在於「subGraph [i] .nodeDelay = AdjList [i] .nodeDelay;」線。Java數組的NullPointerException
我通過打印到控制檯進行測試。並發現AdjList.length是8,問題發生在第一輪;甚至當我只寫「subGraph [i] .nodeDelay;」沒有分配任何值,它也顯示錯誤的信息。 對此有何想法?提前致謝。
添加它的循環中:
subGraph[i] = new Vertex();
首先,您需要訪問它之前實例化一個對象(subGraph[i]
你的情況)。
因爲subGraph[i]
最初是null
。所以subGraph[i].nodeDelay
顯然會拋出一個NullPointerException,因爲你試圖來訪問或修改空對象的字段。默認情況下,引用數組將始終使用空引用元素進行初始化。
答案是:未初始化的變量。你做初始化子圖是一個數組,但你沒有初始化subGraph [i]。
當你在java中創建一個對象數組時,它會自動初始化爲空值。你有責任在數組上循環並使用新對象的引用來填充數組。 在你的情況下,你應該將Vertex對象分配給所有陣列位置。
您需要創建一個Vertex
實例,並在設置任何字段之前將其放入數組中。
喜歡的東西:
public static Vertex[] computeSubGraph(Vertex[] AdjList, int[] retiming)
{
Vertex[] subGraph = new Vertex[AdjList.length];
for (int i = 0; i < AdjList.length; i++) {
subGraph[i] = new Vertex(); // adding instance prior to setting fields.
System.out.println(i);
subGraph[i].nodeDelay = AdjList[i].nodeDelay;
subGraph[i].predecessor = AdjList[i].predecessor;
subGraph[i].mark = AdjList[i].mark;
subGraph[i].starTime = AdjList[i].starTime;
subGraph[i].finishTime = AdjList[i].finishTime;
for (int j = 0; j < AdjList[i].inArcList.size(); j++) {
ArcNode old = AdjList[i].inArcList.get(j);
ArcNode newNode = new ArcNode(old.adjVex, old.arcWeight);
subGraph[i].outArcList.add(newNode);
subGraph[old.adjVex].inArcList.add(newNode);
}
}
return subGraph;
}
在在馬託computeSubGraph的開頭添加
subGraph[i] = new Vertex();
此行之前
subGraph[i].nodeDelay = AdjList[i].nodeDelay;
嘗試打印AdjList – 2013-04-30 08:46:35